2012-09-27 32 views
5

tengoDividir una cadena Java con '.'

1. This is a test message 

Quiero imprimir

This is a test message 

Estoy tratando

String delimiter="."; 
String[] parts = line.split(delimiter); 
int gg=parts.length; 

Que desee imprimir gama

for (int k ;k <gg;K++) 
    parts[k]; 

Pero mi GG es siempre 0 me falta algo. Todo lo que necesito es eliminar el número y. y espacios en blanco

El número puede ser de 1 (o) de 5 dígitos número

+3

Split espera una expresión regular y '.' tiene un significado especial. – assylias

+0

La declaración se ve rara. ¿Quiere decir 'for (int k = 0; k Javier

Respuesta

11

está usando el "." como delimitador, debe romper el significado especial de la . carbón.

El . char en regex es "cualquier caracter" por lo que su división solo se divide según "cualquier caracter", que obviamente no es lo que busca.

Uso "\\." como delimitador

Para obtener más información sobre las clases de caracteres predefinidos que puedas have a look at the tutorial.
Para obtener más información sobre expresiones regulares en general (incluye lo anterior), puede intentar this tutorial


EDITAR:
P. S. Lo que está haciendo (eliminar el número) se puede lograr con un trazador de líneas, utilizando el método String.replaceAll().

System.out.println(line.replaceAll("[0-9]+\\.\\s+", "")); 

proporcionará salida

This is a test message 

Para su ejemplo de entrada.

La idea es: [0-9] es cualquier dígito. - El + indica que puede haber un número cualquiera de ellos, que es mayor que 0. El \\. es un punto (con rotura como se menciona anteriormente) y el \\s+ tiene al menos un espacio.
Todo se reemplaza por una cadena vacía.

Nota, sin embargo, para cadenas como: "1. this is a 2. test" - proporcionará "esto es una prueba", y eliminar el "2" también, así que piense con cuidado si eso es lo que está buscando.

4

Uso siguiente código ..

String delimtor="\\."; // use this because . required to be skipped 
String[] parts = line.split(delimtor); 

Para su bucle.

for (int k=0 ;k <gg.length;K++) 
    parts[k]; 
+0

no se compilará .. (La versión editted será) – amit

+0

Estoy consiguiendo este Excepción en el hilo "principal" java.lang.ArrayIndexOutOfBoundsException..should que tener en cuenta nada? –

+0

Hice el looplik ethat –

2

probar esto

String delimtor = "\\."; 

"" tiene un significado especial para una expresión regular.

1

Si usted está tratando de eliminar los números de prefijo a continuación, puede hacerlo en una sola línea. No estoy seguro si realmente desea dividir en puntos múltiples. Si solo es el prefijo, puede hacerlo en una línea

String s = "1. with single digit"; 
String s2 = "999. with multiple digits"; 
String s3 = "999. with multiple digits . and . dots"; 

assertEquals("with single digit", (s.substring(s.indexOf(".") + 1).trim())); 
assertEquals("with multiple digits", (s2.substring(s2.indexOf(".") + 1).trim())); 
assertEquals("with multiple digits . and . dots", (s3.substring(s3.indexOf(".") + 1).trim())); 
Cuestiones relacionadas