Estou com dúvidas no uso do método split de uma string. Pelo que li, ele retorna um array de strings baseado na divisão da própria pela string passada como parâmetro:
public String[] split(String regex).
Mas não consigo pôr isso pra funcionar, vejam o que faço:
…
String lineRegister = "Fernando|Martines|java";
String[] fields = lineRegister.split("|");
…
<img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngtuck_out_tongue.png?v=9" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:">
pensei que retornasse:
fields[0] = "Fernando";
fields[1] = "Martines";
fields[2] = "java";
:-o
Mas isso não acontece!!! quando peço para imprimir:
System.out.print( fields[1] );
System.out.print( " adora " );
System.out.print( fields[2] );
era pra imprimir:
sonho:
"martines adora java"
realidade:
"f adora e"
:-[
O que há de errado?
Será que é o Pipeline que não pode ser usado? Se sim pq? Será que é por causa do UNIX???
Agradeço o emprenho de todos.
[]´s
Dúvidas no uso do método Split de java.lang.String;
5 Respostas
Martines,
Você não pode usar o pipeline, independentemente do SO.
Por que? Bom, já que você insiste em saber, aqui vai a explicação…
O método split da classe String na verdade utiliza o split da Pattern, que é parte do pacote de expressões regulares, da seguinte forma:
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
Este método compile é o que realmente cria o objeto Pattern, que será utilizado internamente, e inicia o seu parsing através do método expr. O expr vai fazendo um loop para criar objetos Node através do método sequence. É neste sequence que está o problema! Ele tem outro loop, que vai passando caracter a caracter para testar se o caracter seguinte seria o delimitador, mas ao mesmo tempo checa se é algum caracter especial de regexp, tais como *, ?, +, $, etc. O | é um deles, e no caso, ele apenas faz um break no loop, pois é considerado internamente como caracter delimitador. Então, para cada caracter ele acaba retornando um Node, e assim na array cada posição fica com um caracter da String.
Obrigado pelos esclarecimentos!
[]´s
Fernando Martines
Oi,
Houve um engano aí… pode ser usado o pipe ("|") pra separar sim. É verdade o que foi dito, que uma expressão regular é usada, mas para resolver o problema e fazer a classe String interpretar corretamente o pipe, basta "quotá-lo" com o caractere "". Se você colocasse "|" apenas, não daria certo, porque estaria quotando o próprio caractere "|" e aconteceria o mesmo; o que você tem que usar é "|" - uma contrabarra pra quotar a segunda contrabarra, de modo que o interpretador de expressões regulares receberá o caractere ´´ seguido do ´|´ e assim interpretará o "|" como um pipe quotado… Ufa! Complicadinho, né?
Use minhastring.split("|") que dá certo do jeito que você queria.
Realmente eu não havia pensado nesta hipótese!
Só para esclarecer seu exemplo, já que umas barrinhas andaram sumindo da mensagem, então fica:
minhastring.split("\|");
| Quote: |
|
Talvez sim talvez não, é só darmos uma olhadinha nos caracteres meta-dados das er´s

http://guia-er.sourceforge.net/
[]´s
Dalton