2012-01-19 18 views
13

Eventuali duplicati:
Java split() method strips empty strings at the end?metodo split della classe String ignora separatori punto e virgola

In Java, sto usando il metodo split String per dividere una stringa contenente valori separati da virgola.

Attualmente, ho la seguente riga che funziona nel 99% di tutti i casi.

String[] fields = optionsTxt.split(";"); 

Quando si utilizza seguente stringa Tutto è perfetto:

"House;Car;Street;Place" => [House] [Car] [Street] [Place] 

ma quando uso seguente stringa, dividere il metodo ignora gli ultimi due punti e virgola.

"House;Car;;" => [House][Car] 

Cosa c'è che non va? O c'è qualche soluzione?

+0

Ti aspetti uno spazio vuoto come terza uscita? – Tudor

+0

sì, "House; Car ;;" dovrebbe risultare in [House] [Car] [] [] – endian

risposta

17

Prova di seguito:

String[] = data.split(";", -1); 

Fare riferimento alla Javadoc per la split metodo di assunzione due argomenti s per i dettagli.

Quando si chiama String.split(String), si chiama String.split(String, 0) e che gli scarti finali stringhe vuote (come i documenti dicono), quando si chiama String.split(String, n) con n < 0 non scarterà nulla.

+0

Sì! String [] = data.split (";"); Impossibile gestire più punti e virgola. Aggiungendo -1 risolto! –

1

È possibile utilizzare di guava Splitter

Da documentazione:

Splitter.on(',').split("foo,,bar, quux") 

Will iterabile tornare di ["foo", "", "bar", " quux"]

+0

Penso che l'OP non voglia '.trimResults(). omitEmptyStrings();' ... – thejh

1

questo è esplicitamente menzionato nelle javadocs API di Java:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

"Trailing stringhe vuote sono, pertanto, non inclusi nella matrice risultante."

Se si desidera che le stringhe vuote, provare utilizzando la versione a due argomenti dello stesso metodo, con un secondo argomento negativo:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String,%20int)

"Se n è non positivo, il pattern verrà applicato quante più volte possibile e l'array può avere una lunghezza qualsiasi."

Modifica: Hm, i miei collegamenti con le ancore non funzionano.

Problemi correlati