2013-09-06 34 views
5

Muszę pobrać plik wejściowy i dołączyć numer na końcu do jego nazwy, aby użyć go jako plik wyjściowy. Aby to osiągnąć, używam następujący kod:Dlaczego nie mogę użyć "." jako ogranicznik w funkcji split()?

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

i otrzymuję następujący wyjątek:

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

dodałem następujące oświadczenie sprawdzić długość tablicy splitInput, a ja sobie 0 jako wydajność.

System.out.println(splitInput.length); 

Później użyłem ".x" jako ogranicznika (mój plik to .xls). Mogę użyć ".x" i osiągnąć mój cel, ale jestem ciekaw, dlaczego nie "." praca?

+3

spróbować użyć "\". zamiast. Nie jestem w miejscu, w którym mogę to sprawdzić, ale myślę, że ten split oczekuje regex i. znak reprezentuje dowolną postać. – Kylar

+0

@ LuiggiMendoza, dzięki. Mam tam odpowiedź .. – DT7

+0

@Kylar, Moja nazwa pliku jest podobna do c: /temp/sample.xsl .. Potrzebowałem c:/temp/sample i dodałem liczbę podobną do 123, a następnie dodałem do niej .xls. Początkowo myślałem, że mogę po prostu podzielić na dwie części wokół. i dodaj numer w środku. Teraz dzielę się przy użyciu ".x" i otrzymuję pierwszą część, dodam numer i mam rozszerzone oznaczenie.Dzięki :) – DT7

Odpowiedz

11

Funkcja korzysta z wyrażeń regularnych, musisz uciec przed "." za pomocą "\"

Podczas używania wyrażeń regularnych "." oznacza dowolną postać. Spróbuj tego

String delimiter = "\\.x"; 

Należy również wspomnieć, że \ w Java jest również specjalny znak używany do tworzenia innych znaków specjalnych. Dlatego trzeba Ucieczka swoje \ z innym \ stąd "\\.x"


Tam jakąś wielką dokumentację w docs Java o wszystkich znaków specjalnych i co robią:

Java 8 Docs
Java 7 Docs
Java 6 Docs

1

. jest traktowany jak każda postać w wyrażeniu regularnym. Użyj znaku ucieczki \ (który musi również zostać zmieniony jako \\), jeśli chcesz zastąpić specjalne znaczenie tego znaku.

1

String.split() oczekuje wyrażeń regularnych jako danych wejściowych. W wyrażeniach w języku Java znak . jest znakiem specjalnym. W związku z tym twoje oświadczenie podzielone nie działa zgodnie z oczekiwaniami. Powinieneś uciec przed swoim "." jako \\..