Duvida no metodo split()

11 respostas
D

o que tem de errado nesse codigo:

String texto = "cliente.nome";
String[] array = texto.split(".");
System.out.println(array[0]);

nao era pra dividir a string onde tem o ponto :?:

mas quando rodo da o erro:
java.lang.ArrayIndexOutOfBoundsException: 0

:?

alguem sabe pq :?:

11 Respostas

J

Oi

Denis, testei aqui e rodou na boa…

String aa = "aaaa/bbbb"; String[] aabb = aa.split("/");

:roll:

T+

J

mm o caracter “.” nao serve para delimitar uma string porque ele pode estar sendo interpretado como uma expressao regular, experimenta colocar uma barra invertida antes do ponto “.” talvez resolva

D

fala…

parece q o split nao separa string com . (ponto) nao…

comigo deu o mesmo erro qdo tentei executar o código do denis…
pra como tava disparando a exception ArrayIndexOutOfBoundsException achei q só podia ser pq nao tinha nada no array!
tanto é q qdo o retorno de array.length era 0

pra testes mudei o carcter separador e funcionou…

String texto = "cliente/nome";
String[] array = texto.split("/");
System.out.println(array[0]);

e assim funcionou com a / como caracter separador…

estranho… eu achava q funcionaria com o ponto…

alguem sabe explicar pq com o ponto nao funciona???
fiquei meio curioso agora! hehehe

flw!

D

hahaha… eu fiquei tanto tempo escrevendo o meu post q javaquest postou antes de mim!

o bom foi q ele tirou minha duvida antes mesmo de saber qual era! hehehe

valeu!

D

valeu pela ajuda pessoal…

:arrow: primeiramente a ideia de usar ‘.’ nao funciona:

C:\Programas\Java\Teste.java:9: illegal escape character
		String[] array = texto.split("\.");
                                                                    ^

:arrow: ja tentei também…

String texto = "nome.cliente";
// o hexa 2e corresponde ao ponto
String[] array = texto.split("\u002e");
System.out.println(array[0]);

mas continua dando o mesmo erro :?

:idea: a solução temporária que encontrei foi usar o replace() pra trocar o ‘.’ por ‘#’ :

String texto = "nome.cliente";
String temp = texto.replace('.','#');
String[] array = temp.split("#");
System.out.println(array[0]);

assim funciona, pelo posso dar continuidade ao meu projeto. :wink:

mas eu ainda gostaria de saber o motivo do porque nao funciona com o ponto …

ja procurei na API mas nao achei nada a respeito

:roll:

L

Olá pessoal!!!

O problema que vocês estão tendo chama-se regex (expressões regulares).

O ponto no regex significa “um caracter qualquer nesta posição”. Traduzindo: quando utilizamos o método split um objeto java.util.regex.Pattern é criado e em seguida é feita uma verificação de reconhecimento do padrão que foi informado. Portanto, a idéia do split é fazer uma divisão (quebra) da string com base no padrão informado, e este padrão deve ser coerente com este método… vou deixar de blábláblá… Se o padrão for o ponto (.) o split irá gerar um vetor vazio, pois ele entenderá o seguinte: “quebre a string quando encontrar um caracter qualquer nesta posição”… mas qual posição? :?

Modifiquei seu código e utilizei o ponto(.) entre colchetes ([])
Colchetes indica um grupo de caracteres, veja:

class Teste {

  public static void main(String a[]) {
    String texto = "cliente.nome";
    String[] array = texto.split("[.]");
    System.out.println(array[0]); 
    System.out.println(array[1]); 
  }

}

Veja mais informações aqui neste endereço: http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html#sum

Boa Sorte a Todos!!!

Espero ter ajudado…

Luís :smiley:

D

agora sim…

muito obrigado!!! valeu mesmo…
:smiley: :smiley: :smiley:

J

Ei por favor continuando a duvida dele

eu poderia separar assim

String[] array = texto.split("[. ! ? ( ) [ ] ]");

coisas assim
ou seja, colocar mais de um separador de string…?

L

“JavAlcatraz”:
Ei por favor continuando a duvida dele

eu poderia separar assim

String[] array = texto.split("[. ! ? ( ) [ ] ]");

coisas assim
ou seja, colocar mais de um separador de string…?

Observe o seguinte: como estamos utilizando uma expressão regular de grupo, os colchetes funcionam como delimitador do conjunto, portanto, para que ele também possa ser interpretado como um caracter, o regex exige que seja utilizando um sinalizador de literal, neste caso \. Basta colocar o \ antes do colchete.

O seu código ficaria assim:

String[] array = texto.split("[.!?()\[\]]");

Dica: removi os espaços em branco, mas não há problema algum em utilizá-lo como separador. Ah, evite repetir o mesmo símbolo dentro do grupo, mesmo sabendo que o java é inteligente o suficiente para ignorá-los (esta é uma ótima prática de programação, seu código fica mais legível, visto que o regex não é legível à primeira vista).

Boa Sorte a Todos!!!

Luís

alssst
String[] meuArray = minhaString.split(Pattern.quote ("."));
asousaj
String[] array = texto.split("\.");
Criado 10 de junho de 2004
Ultima resposta 19 de jul. de 2012
Respostas 11
Participantes 8