2010-01-30 15 views

Respuesta

87

La función de división toma una expresión regular, no es una cadena, para que coincida. Su expresión regular utiliza un carácter especial - en este caso, '$' - por lo que tendría que cambiar para escapar de ese personaje:

String line = ... 
String[] lineData = line.split("\\$"); 

También tenga en cuenta esa fracción devuelve una matriz de cadenas - Las cadenas son inmutables, por lo que no puede ser modificado Cualquier modificación hecha a la cadena se devolverá en una nueva cadena, y el original no se cambiará. De ahí el lineData = line.split("\\$"); anterior.

+4

Técnicamente, el argumento de expresión regular para String.split() es un objeto de tipo String. Pero el método espera que esté en un formato de expresión regular. – David

+0

Sí, eso es correcto - disculpas si no lo dejé claro, o si estaba confundido en esa declaración. – aperkins

+10

Split devuelve String [], no String. – ColinD

3

split() utiliza una expresión regular como parámetro. Tienes que llamar split("\\$"), porque $ es la expresión regular para "fin de línea".

3

String.split() en Java toma un argumento de cadena que es una expresión regular. El carácter '$' en una expresión regular significa el final de una línea. Puede usar una secuencia de escape ("\\ $") si está buscando un signo de dólar en la cadena.

Fuentes:

String - Java API

Pattern - Java API

+0

No se olvide de escapar de la \ aswell .. así que eso ("\\ $") – Tim

+0

@Tim - Sí, eso es lo que escribí ... eso depende de quien se presentó como una barra invertida. Todavía soy bastante nuevo para SO y su editor. – David

3

$ es un carácter especial en las expresiones regulares que representa el final de la línea. Para que coincida con un signo de dólar, use "\\$".

13

El método de división acepta una cadena como el primer parámetro que se interpreta entonces como una expresión regular.

El signo del dólar es un operador específico en expresiones regulares y lo que tiene que escapar de esta manera para conseguir lo que quiere:

String data = ... 
String[] parts = data.split("\\$"); 

O, si el delimitador puede cambiar puede ser más general de esta manera :

String data = ... 
String[] parts = data.split(java.util.regex.Pattern.quote("$")); 
0

Puede tener un problema con los caracteres de uniCode para espacios no disruptivos. Intenta ...

String[] elements = myString.split("[\\s\\xA0]+"); //include uniCode non-breaking 
Cuestiones relacionadas