2012-09-27 16 views
5

HoSuddivisione di una stringa Java con "."

1. This is a test message 

voglio stampare

This is a test message 

sto cercando

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

Than consiglia di stampare serie

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

Ma il mio GG è sempre 0 mi manca qualcosa. Tutto ciò di cui ho bisogno è rimuovere il numero e. e spazi bianchi

Il numero può essere 1 (o) 5 cifre numero

+3

Split si aspetta un'espressione regolare e '.' ha un significato speciale. – assylias

+0

Per le dichiarazioni sembra strano. Intendi 'per (int k = 0; k Javier

risposta

11

Si utilizza "." come delimitatore, si dovrebbe rompere il significato speciale del . char.

Il carattere . nella regex è "qualsiasi carattere", quindi la divisione è solo suddivisione in base a "qualsiasi carattere", che ovviamente non è ciò che si sta cercando.

Usa "\\." come delimitatore

Per ulteriori informazioni sulle classi di caratteri predefiniti che puoi have a look at the tutorial.
Per ulteriori informazioni sulle espressioni regolari sul generale (comprende il sopra) si può provare this tutorial


EDIT:
P.S. Quello che stai facendo (rimuovendo il numero) può essere ottenuto con un one-liner, usando il metodo String.replaceAll().

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

fornirà uscita

This is a test message 

per il suo esempio di ingresso.

L'idea è: [0-9] è qualsiasi cifra. - il + indica che può esserci un numero qualsiasi di loro, che è maggiore di 0. Il numero \\. è un punto (con rottura come sopra menzionato) e lo \\s+ occupa almeno uno spazio.
Viene sostituito da una stringa vuota.

Nota comunque, per stringhe come: "1. this is a 2. test" - fornirà "questo è un test" e rimuoverà anche il "2.", quindi pensa attentamente se è davvero quello che cerchi.

4

Usa codice seguente ..

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

Per il vostro ciclo for.

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

Non verrà compilato .. (La versione edita sarà) – amit

+0

Ricevo questa eccezione nel thread "main" java.lang.ArrayIndexOutOfBoundsException..should Prenderò in considerazione qualcosa? –

+0

Ho fatto il looplik ethat –

2

provare questo

String delimtor = "\\."; 

"" ha un significato speciale per un'espressione regolare.

1

Se si sta solo tentando di rimuovere i numeri di prefisso, è possibile farlo in un'unica riga. Non sei sicuro di voler dividere in più punti. Se è solo il prefisso, puoi farlo in una riga

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())); 
Problemi correlati