Função split quebrando string!

7 respostas
caiofabioa

Desculpa pelo assunto, não consegui achar outro melhor mas enfim. Vejam isso (eu garanto que quebrei a cabeça e não descobri):

private void testeString () {
        int i;
       String dados = "Caio: Fábio. Araújo.";
       String list[] = dados.split(". "); 
		for (i=0 ; i < list.length ; i++){
			System.out.println(i+"-"+list[i]);
                        comparaString(list[i]);
		}
        
    }

bom esse trecho nem preciso explicar né! O que eu pensei que ele iria imprimir

0-Caio: Fábio 1-Araújo

Porém ele estão imprimindo:

run: 0-Caio 1-Fábio 2-Araújo. CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

:? :? Alguém? :idea:

7 Respostas

davidbuzatto

O argumento do método split de String é uma expressão regular e não uma String.
Você quer que seja separado em ponto espaco ". "?

M

O método String.split usa uma expressão regular[1] para quebrar o texto e em expressões regulares o ponto (.) representa qualquer coisa.

Isso quer dizer que seu código está quebrando em todos os espaços precedidos de qualquer coisa.

Tente escapar o ponto:

dados.split("\\. ");

[1] http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

caiofabioa

Exatamente, quero que ele separa onde há um ponto seguido de espaço!

caiofabioa

O método String.split usa uma expressão regular[1] para quebrar o texto e em expressões regulares o ponto (.) representa qualquer coisa.

Isso quer dizer que seu código está quebrando em todos os espaços precedidos de qualquer coisa.

Tente escapar o ponto:

dados.split("\\. ");

[1] http://docs.oracle.com/javase/7/docs/api/java/lang...ml#split(java.lang.String)

Poxa Obrigado, e eu vi isso em outros tópicos mas ninguem tinha explicado assim certinho :wink:

valeu :D:D:D

R

O método split da string recebe uma expressão regular.
O “.” equivale a qualquer caracter e o " " ao espaço.
Então o que você esta falando para dividir em qualquer coisa espaço.
Isso acaba ficando Caio - Fábio - Araújo.
para sair como voce quer coloque "\. ".
com a . esta indicando para procurar o caracter “.” e não qualquer caracter.

Estude expressão regular para entender melhor como o método funcionar,
senão poderá ter problemas com o *, ? e outro caracteres.

Valeu!

davidbuzatto

O ponto na sintaxe das expressões regulares é um metacaracter que significa "qualquer caracter". Se você quer usá-lo, vc precisa escapalo usando uma contra barra. Como em Java a contrabarra é usada para escape, na String vc precisa de duas, uma para iniciar o escape, a segunda para indicar que quer-se uma contrabarra e então o ponto. Veja:

public class Foo {

    public static void main( String[] args ) {

        String dados = "Caio: Fábio. Araújo.";
        for ( String s : dados.split( "\\. " ) ){     => significa "\. ", pois \\ vai virar apenas \
            System.out.println( s );
        }

    }

}
E

Para quem não quer estudar expressões regulares, só precisa aprender um método:

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#quote(java.lang.String)

Um exemplo:

private void testeString () {  
        int i;  
       String dados = "Caio: Fábio. Araújo.";  
       String list[] = dados.split(Pattern.quote(". "));   // isto remove o significado especial do ".", "|", "[". "]", "*", "^" e "$" 
        for (i=0 ; i < list.length ; i++){  
            System.out.println(i+"-"+list[i]);  
                        comparaString(list[i]);  
        }  
          
    }
Criado 17 de janeiro de 2013
Ultima resposta 18 de jan. de 2013
Respostas 7
Participantes 5