2014-10-23 6 views
6

Czytam plik w Javie i chcę podzielić każdą linię przez wartość w cudzysłowach. Na przykład, linia będzie ...Dzielenie łańcucha według wartości między cudzysłowami w Javie

"100", "to jest", "a", "test"

Chciałbym tablicę wyglądać ..

[0] = 100 
[1] = this, is 
[2] = a 
[3] = test 

Zwykle dzielę przecinkiem, ale ponieważ niektóre pola zawierają przecinek (pozycja 1 w powyższym przykładzie), nie jest to właściwe.

Dzięki.

+0

The (regex String) metoda wykorzystuje String.split wyrażenie regularne jako argument, więc po prostu użyj wyrażenia regularnego, które pasuje do '" czegoś "' nie wiem od do p mojej głowy, ale ktoś da ci odpowiedź wystarczająco szybko – Neilos

+0

usunąć pierwszą i ostatnią '" 'znak, a następnie podzielić go na' "," ' – user902383

+0

tak, jestem trochę zdezorientowany na temat przecinków w jego przykładzie, nie zrobiłem" t see it 1st – Neilos

Odpowiedz

2

można zrobić następujące

String yourString = "\"100\",\"this, is\",\"a\",\"test\""; 
    String[] array = yourString.split(",\""); 
    for(int i = 0;i<array.length;i++) 
     array[i] = array[i].replaceAll("\"", ""); 

Wreszcie tablicę zmienna będzie żądany tablicę

wyjścia:

100 
    this, is 
    a 
    test 
+0

Skończyło się na tym, działało jak czar!Dziękuję wszystkim. – user3722194

2

Oto jeden prosty sposób:

String example = "\"test1, test2\",\"test3\""; 
int quote1, quote2 = -1; 
while((quote2 != example.length() - 1) && quote1 = example.indexOf("\"", quote2 + 1) != -1) { 
    quote2 = example.indexOf("\"", quote1 + 1); 
    String sub = example.substring(quote1 + 1, quote2); // will be the text in your quotes 
} 
+0

Mając bardziej wymowną nazwę niż "a" i przykładowy łańcuch String, tak, że fragment kodu jest możliwy do uruchomienia i można podać przykładowy wynik, byłoby to idealne ;-) – LionC

2

Można podzielić ją w następujący sposób:

String input = "\"100\",\"this, is\",\"a\",\"test\""; 
for (String s:input.split("\"(,\")*")) { 
    System.out.println(s); 
} 

Output

100 
this, is 
a 
test 

Uwaga Pierwszy ar Element ray będzie pusty.

0

Szybki i brudny, ale działa:

String s = "\"100\",\"this, is\",\"a\",\"test\""; 
    StringBuilder sb = new StringBuilder(s); 
    sb.deleteCharAt(0); 
    sb.deleteCharAt(sb.length()-1); 
    String [] buffer= sb.toString().split("\",\""); 
    for(String r : buffer) 
     System.out.println(r); code here 
+0

zamiast tego konwertowanie łańcucha znaków do StringBuilder, możesz użyć metody podciągu na łańcuchu – user902383

+0

I choć o tym, ale zdecydowałem, że łatwiej było to zrozumieć za pomocą jawnej metody, takiej jak 'deleteCharAt' – ortis

0

Oto sposób za pomocą wyrażenia regularnego.

public static void main (String[] args) { 
    String s = "\"100\",\"this, is\",\"a\",\"test\""; 
    String arr[] = s.split(Pattern.quote("\"\\w\""))); 
    System.out.println(Arrays.toString(arr)); 
} 

wyjścia:

["100","this, is","a","test"] 

Co robi to mecze:

\" -> start by a " 
    \\w -> has a word character 
    \" -> finish by a " 

nie wiem jakie wartości trzeba, ale można go zmodyfikować, jak trzeba.