2012-09-10 24 views
5

Próbuję zapisać grupy w łańcuchu do tablicy, dzięki czemu mogę używać ich w poszczególnych zmiennych, jeśli jest to konieczne. W tym celu używam split, ale z jakiegoś powodu otrzymuję pełny łańcuch na pierwszej pozycji w tablicy: ultimate_array [0]. Jeśli chcę użyć parametru ultimate_array [1], otrzymuję wyjątek typu "poza granicami". Czy masz pojęcie, co robię źle?podział nie działa poprawnie

String string_final = ""; 
String[] ultimate_array = new String[100]; 
String sNrFact = ""; 

string_final="Nrfact#$idfact1#$valfact1#$idfact2#$valfact2#$idfact3#$valfact3#$idfact4#$valfact4#$idfact5#$valfact5#$idfact6#$valfact6#$idfact7#$valfact7#$idfact8#$valfact8#$idfact9#$valfact9#$idfact10#$valfact10"; 

ultimate_array = string_final.split("#$"); 
sNrFact = ultimate_array[0]; 
+3

Argumentem funkcji 'split()' powinno być wyrażenie regularne, więc '$' pasuje do "końca ciągu znaków". Odpowiedź –

Odpowiedz

2

Musisz uciec $ (koniec sznurka)

ultimate_array = string_final.split("#\\$"); 
2
ultimate_array = string_final.split("#\\$"); 

Powodem Twój podziału nie działa prawidłowo, że rozłam używa regex i „$” jest znakiem specjalnym dla regexes (drekka)

+0

jest poprawna. Powód, dla którego podział nie działa poprawnie, polega na tym, że split używa wyrażenia regularnego, a "$" jest specjalnym znakiem dla wyrażeń regularnych. – drekka

3

Podział odbywa wyrażenie regularne i $ to znak specjalny (koniec łańcucha), więc musisz uciec z tym ukośnikiem odwrotnym \. W każdym razie jest to również szczególny charakter, tym razem w Javie, więc musisz także uciec. Ostateczny kod jest:

ultimate_array = string_final.split("#\\$"); 
0

Wystarczy wymienić linię:

ultimate_array = string_final.split("#$"); 

z:

ultimate_array = string_final.Split(new string[] { "#$" }, StringSplitOptions.None); 

Mam nadzieję, że Twój problem został rozwiązany ...

Powiązane problemy