3

Tengo las​ siguientes​ líneas​:

valor1=cadena.split("|")[0];
valor2=cadena.split("|")[1] ;

Sin embargo, estoy obteniendo null, lo que quiere decir que no estoy obteniendo ningún valor al hacer el split.

He intentado lo mismo pero con coma:

valor1=cadena.split(",")[0];
valor2=cadena.split(",")[1] ;

Y esto sí funciona.

Mariano
  • 23,777
  • 20
  • 70
  • 102
FrEqDe
  • 3,516
  • 14
  • 42
  • 77
  • 2
    Split [nunca](http://stackoverflow.com/questions/6902078/is-it-possible-that-java-string-split-can-return-a-null-string#6902125) retorna `null`. Si no hay coincidencias, retorna la misma cadena de entrada. – Alfabravo Apr 06 '17 at 23:18
  • @Alfabravo Eso no lo sabía, gracias por aclarar eso. – FrEqDe Apr 07 '17 at 01:23

5 Answers5

5

Hola amigo te recomiendo que hagas esto:

Para hacer un split en java usando como patrón de separación un carácter especial ".", "$", etc… Debemos utilizar los carácteres de escape "\" como prefijo.

Codigo:

String[] palabras = cadena.split("\\.");

En tu caso seria algo como esto:

 valor1=cadena.split("\\|")[0];

valor2=cadena.split("\\|")[1] ;

En este link te ayudara tambien:

Metodo Split en Java

Critical Ghost
  • 1,276
  • 2
  • 14
  • 36
5

Debido a que el método split de la clase java.lang.String recibe, en primer lugar, una expresión regular, el carácter | (sin escapar) es considerado como operador de alternancia.1

❍ Sin escape

"a|b||d".split("|")["a", "|", "b", "|", "|", "d", ""]

❍ Con escape

De ahí que sea necesario escapar el | con \. Es decir:

"a|b||d".split("\\|")["a", "b", "", "d"]

❍ Sin límite

No obstante, quizás sea más conveniente especificar el límite. Por ejemplo, sin límite especificado:

"a|||".split("\\|")["a"]

❍ Con límite (-1)

"a|||".split("\\|", -1)["a", "", "", ""]

Notas

  1. Alternation with The Vertical Bar or Pipe Symbol (en inglés).
Paul Vargas
  • 181
  • 1
  • 20
  • 39
3

Tienes que usar

valor1=cadena.split("\\|")[0];

El método split(String regex) usa una expresión regular, entonces tienes que escapar el |, o separas por "nada o nada".

Stefan Nolde
  • 6,648
  • 1
  • 24
  • 44
2

Se puede almacenar en un array los elementos separados por el pipe | mediante .split("\\|"):

String cadena = "Mike|Irina|John|Mary|Joseph";
String[] valores = cadena.split("\\|");

o mediante .split(Pattern.quote("|")) :

  String[] valores = cadena.split(Pattern.quote("|"));

para obtener sus valores

String valor1 = valores[0];  //valor Mike 
String valor2 = valores[1];  //valor Irina
String valor3 = valores[2];  //valor John
String valor4 = valores[3];  //valor Mary
String valor5 = valores[4];  //valor Joseph

También puedes obtener directamente los valores de la cadena de esta forma:

String valor1 = cadena.split("\\|")[0]; //valor Mike 
String valor2 = cadena.split("\\|")[1];  //valor Irina
String valor3 = cadena.split("\\|")[2];  //valor John
...

o mediante .split(Pattern.quote("|")) :

 String valor1 = cadena.split(Pattern.quote("|"))[0]; //valor Mike 
 String valor2 = cadena.split(Pattern.quote("|"))[1];  //valor Irina
 String valor3 = cadena.split(Pattern.quote("|"))[2];  //valor John
 ...
 ...

A diferencia de :

 String[] valores = cadena.split(",");

que se puede realizar sin realizar escape del caracter "," ya que no es un caracter especial.

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • 3
    Esta es la respuesta que responde al caso genérico y lo que se debería usar como buena práctica. `Pattern.quote()` es sin duda la opción a usar. – Mariano Apr 07 '17 at 03:12
2

Yo te recomendaría remplazar tu "\" por "," con el método replace java.lang.String, quédandote algo como esto:

String cadenaN = cadena.replace("\\\",",");
valor1=cadenaN.split(",")[0];
valor2=cadenaN.split(",")[1];

O hacerle cómo indican arriba.

5frags
  • 399
  • 4
  • 12