2013-04-30 43 views
7

Ho una stringa come ||81|||01|| e voglio dividere la stringa con il simbolo |.Java: dividere una stringa che contiene caratteri speciali

che avevo fatto in questo modo,

String str = "||81|||01||"; 
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8 

cosa c'è di sbagliato con questo codice? | Come posso dividere questa stringa con quel carattere in modo tale da ottenere la lunghezza prevista (8) ?;

+0

Perché pensi 8 come previsto? – NINCOMPOOP

+0

@NoobUnChained se esistono delimitatori 'n', la stringa deve essere divisa in parti' n + 1'. Nell'input dato ci sono pipe '7', quindi dovrebbero esserci risultati' 8'. –

+0

Introduci uno spazio all'inizio e alla fine: '" || 81 ||| 01 || "' per ottenere il risultato previsto;) – NINCOMPOOP

risposta

8

Stampa:

System.out.println(Arrays.toString(str.split("\\|")));

E capirete perché è la stampa 6.

si può provare a fare ciò che si vuole utilizzare pubblica String[] split(String regex, int limit):

Il limite controlli dei parametri il numero di volte in cui il pattern è applicato e quindi influenza la lunghezza della matrice risultante.

Così si dovrebbe fare:

System.out.println(str.split("\\|", -1).length); 

Ora, la stampa l'array stamperà:

[, , 81, , , 01, , ] come previsto.

1

è necessario utilizzare:

str.split("\\|", -1) 

Il secondo parametro è limit. Dal javadoc:

Il parametro limite controlla il numero di volte che il modello è applicata e quindi influenza la lunghezza della matrice risultante. Se il limite n è maggiore di zero, il modello verrà applicato a la maggior parte n - 1 volte, la lunghezza dell'array non sarà maggiore di n e l'ultima voce dell'array conterrà tutti gli input oltre l'ultimo delimitatore corrispondente. Se n non è positivo, il pattern verrà applicato come il più possibile e l'array può avere una lunghezza qualsiasi. Se n è zero , il pattern verrà applicato tutte le volte che è possibile, l'array può avere una lunghezza qualsiasi e le stringhe vuote finali verranno scartate.

11

Uso split("\\|") è lo stesso split("\\|", 0), dove il parametro limite 0 indica alla funzione "omettere finali stringhe vuote". Quindi ti mancano le ultime due stringhe vuote. Utilizzare la versione a due argomenti e fornire un numero negativo per ottenere tutte le parti (anche trascinamento quelli vuoti):

str.split("\\|", -1) 
+1

Dear downvoter, ti andrebbe di lasciare un commento in modo da poter migliorare la risposta? –

1

str.split("\\|", -1) farà il necessario. Eventuali duplicati: Here

1

String str = "||81|||01||"; System.out.println(str.split("\\|", 8).length);

Il secondo argomento di dividere specifica il numero massimo di corrispondenze. La suddivisione in un solo argomento è come invocare split (str, 0) che omette le stringhe finali. Vedi javadoc di entrambi per maggiori spiegazioni.

+0

usando '8' è abbastanza inflessibile. se usi solo un argomento negativo (come le altre risposte), otterrai semplicemente tutte le parti, non importa quanti '|' ci sono in 'str' –

3

È inoltre possibile utilizzare string.split (Pattern.quote ("|"), - 1) per dividere una stringa su un carattere speciale.

+1

Potresti per favore elaborare più la tua risposta aggiungendo un po 'più di soluzione che fornisci? – abarisone

+0

esempio per dividere "|| 81 ||| 01 ||" basato sul carattere speciale '|' allora puoi usare 'String s =" || 81 ||| 01 || "; Array di stringhe [] = s.split (Pattern.quote ("|"), - 1) ' lunghezza dell'array così ottenuto sarà 8. – Santosh

Problemi correlati