Reconhecer valor entre pipes "|"

Estou trabalhando uma classe que me deve retornar vários valores.

Para facilitar a manipulação desses retornos decidi usar o seguinte médoto:

return string1 +"|"+ string2 +"|"+ string3

Como ainda sou meio “grosso” no Java não estou conseguindo trabalhar esses valores, por exemplo:

[quote]Eu chamo o método que contém esse retorno;
Seto uma label qualquer com o valor da string1 (tudo até o primeiro pipe, exceto o próprio pipe);
Seto uma segunda label com o valor da string3 (tudo a partir do segundo pipe até o final do retorno, exceto o proprio pipe);[/quote]

Como eu faço essa manipulação de string?
(espero ter sido claro… :lol:)

Credo, eu retornaria esses valores em um List<String>.

Mas se você é obrigado a retornar uma String (sabe como é que é, pode ser que você esteja criando algo para ser acessível via web services…) então você pode usar String.split. Exemplo:

String valor = "Jesus|Maria|Jose";
String[] valores = valor.split (Pattern.quote ("|"));

Na verdade eu não sou obrigado a retornar uma String… É que como eu disse, eu sou grossão em Java ainda, estou reaprendendo tudo (aprender de pois de velho é trash mano, acredite…)!

Como assim usar uma List?

Eu nunca usei, você poderia me dar um exemplo ou alguma referência para que eu pudesse ler?

Valeu thingol e desculpa pela ignorância!

Ao inves de retornar uma string com pipes, retorna uma lista.

List<String> list = new ArrayList<List>(); list.add(string1); list.add(string2); list.add(string3); return list;

Vou dar um exemplo.

class TesteListaValores {
    public List<String> listarJogadores() {
        List<String> jogadores = new ArrayList<String>();
        jogadores.add ("Ronaldo");
        jogadores.add ("Keirrison");
        jogadores.add ("Neymar");

        return jogadores;
    }
    public static void main(String[] args) {
        TesteListaValores  tlv = new TesteListaValores ();
        List<String> jogadores = tlv.listarJogadores();
        // Deve imprimir: "Ronaldo" "Keirrison" "Neymar"
        for (String jogador : jogadores) {
            System.out.println (jogador); 
        }
    }
}

Acho que sou mais velho que você :cry: . O que é difícil é aprender as coisas estando enferrujado; por exemplo, se eu tivesse de pegar meus livros de álgebra de novo.

Uma alternativa seria o StrngTokenizer

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

[quote=paulofernandesjr]Uma alternativa seria o StrngTokenizer

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html[/quote]

Hummmm… para código novo, evite usar StringTokenizer. Há dois grandes problemas com o StringTokenizer:
a) Ele não é tão flexível, rápido, conveniente e econômico de recursos quanto o String.split
b) StringTokenizer pode dar resultados inesperados, porque StringTokenizer não aceita campos vazios nem separadores com mais de um caracter.
Por exemplo, “abc||d|e|||f||”.split (Pattern.quote("|"), -1) retorna um array contendo “abc”, “”, “d”, “e”, “”, “”, “f”, “”, “”.
Mas se você for usar StringTokenizer, ele retorna algo semelhante a “abc”, “d”, “e”, “f”, não retornando nenhum dos campos vazios, o que normalmente é um comportamento indesejado.

De fato, se o objetivo é pegar os caracteres mesmo vazios, beleza…

é melhor fazer da forma que você disse.

mas se você quer eliminar os espaços em branco e pegar somente os campos que tem valores, o StringTokenizer é melhor

abraço

“abc||d|e|||f||”.split ("[|]+")) retorna “abc”, “d”, “e”, “f”, igualzinho ao StringTokenizer.
Eu ainda prefiro String.split porque é mais fácil de debugar (basta ver o array que ele retornou). StringTokenizer exige você ficar andando sobre a string, e isso é desajeitado.

OK OK

apreoveitando o tópico, o que tem a dizer sobre StringBuffer e StringBuilder

qual é melhor e compensa mais

abraço

Use StringBuffer em código Java 1.4 ou anterior, ou se estiver usando Java 5.0 ou posterior, se o StringBuffer for compartilhado entre várias threads (um evento reconhecidamente raro mas não improvável).
Use StringBuilder em código Java 5.0 ou posterior

valeu pelas dicas

Eu andei dando uma pesquisada e li bastante coisas…

No meu caso, como eu conheço exatamente o número de itens que serão retornados, não seria melhor usar um array?

Pelo que li, o List se aplicaria de forma mais efetiva a itens dinâmicos e de crescimento sem controle do programador, isso procede?

O que vocês acham?

P.S.:

thingol, faltou o item jogadores.add(“Uóshitu”); (odeio nome complicado… 8) )

Hum… eu sou extremamente preguiçoso e prefiro usar sempre List<String>, não String[]. De qualquer maneira, parece que o que você quer retornar é na verdade um objeto:

class Endereco {
    public String logradouro;
    public String complemento;
    public Endereco (String L, String C) { logradouro = L; complemento = C; }
}
// Faça assim:
public Endereco getEndereco () {
    return new Endereco ("Av. Paulista", "900");
}
// Não assim:
public String[] getEndereco () {
    return new String []{"Av. Paulista", "900"};
}
// Ou mesmo assim:
public List<String> getEndereco () {
    List<String> endereco = new ArrayList<String>();
    endereco.add ("Av. Paulista");
    endereco.add ("900");
    return endereco;
}