Reconhecer valor entre pipes "|"

14 respostas
Baroni

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:

<blockquote>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);</blockquote>

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

14 Respostas

T

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 ("|"));
Baroni

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!

P

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;

T

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); 
        }
    }
}
T

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.

paulofernandesjr

Uma alternativa seria o StrngTokenizer

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

T

paulofernandesjr:
Uma alternativa seria o StrngTokenizer

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

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.

paulofernandesjr

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

T

“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.

paulofernandesjr

OK OK

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

qual é melhor e compensa mais

abraço

T

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

paulofernandesjr

valeu pelas dicas

Baroni

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) )

T

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;
}
Criado 26 de março de 2009
Ultima resposta 26 de mar. de 2009
Respostas 14
Participantes 4