2013-09-06 22 views
5

Devo prendere un file di input e aggiungere un numero alla fine del suo nome da utilizzare come file di output. Per raggiungere questo obiettivo, io uso il seguente codice:Perché non posso usare "." come delimitatore nella funzione split()?

String delimiter = "."; 
String[] splitInput = inputLocation.split(delimiter); 
String outputLocation = splitInput[0]; 

ed ottengo la seguente eccezione:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 

ho aggiunto la seguente dichiarazione di verificare la lunghezza della matrice splitInput, e ottengo 0 come produzione.

System.out.println(splitInput.length); 

Successivamente, ho usato ".x" come delimitatore (il mio file è .xls). Posso usare ".x" e raggiungere il mio scopo, ma sono curioso perché non "." lavoro?

+3

provare a utilizzare "\". anziché. Non sono in un posto dove posso verificarlo, ma penso che la divisione si aspetti una regex, e il. il personaggio rappresenta qualsiasi personaggio. – Kylar

+0

@LuiggiMendoza, grazie. Ho ricevuto la mia risposta .. – DT7

+0

@Kylar, Il mio nome file è come c: /temp/sample.xsl .. Avevo bisogno del c:/temp/sample e aggiungo un numero come 123 e poi aggiungo .xls ad esso. Inizialmente pensavo di poterlo dividere in due parti attorno al. e aggiungi il numero in mezzo ... Ora ho diviso usando ".x" e ho ottenuto la prima parte, aggiungo il numero e ho l'estensione codificata.Grazie :) – DT7

risposta

11

La funzione split utilizza le espressioni regolari, è necessario sfuggire al proprio "." con "\"

Quando si utilizzano le espressioni regolari un "." significa qualsiasi personaggio. Prova questo

String delimiter = "\\.x"; 

Va inoltre ricordato che \ in Java è anche un carattere speciale utilizzato per creare altri caratteri speciali. Pertanto è necessario sfuggire al tuo \ con un altro \ da qui il "\\.x"


Theres qualche grande documentazione nella documentazione Java su tutti i caratteri speciali e cosa fare:

Java 8 Docs
Java 7 Docs
Java 6 Docs

1

. è considerato come qualsiasi carattere nella regex. Utilizzare il carattere di escape \ (che deve anche essere salvato come \\), se si desidera sovrascrivere il significato speciale di esso.

1

String.split() prevede una regex come input. In Java regex, il carattere . è un carattere speciale. Pertanto, la tua dichiarazione divisa non funziona come ti aspettavi. Dovresti sfuggire al tuo "." come \\..

Problemi correlati