2011-04-21 54 views
-2

可能重複:
Can you recommend a Java library for reading (and possibly writing) CSV files?分裂Java字符串用引號

我需要拆分Java中的字符串。分隔符是空格字符。 字符串可能包含成對的引號(內部包含一些文本和空格) - 成對引號內的整個主體應視爲單個標記。 示例:

 
Input: 
     token1 "token 2" token3 

Output: array of 3 elements: 
     token1 
     token 2 
     token3 

該怎麼辦? 謝謝!

+1

後輸入文本的例子,然後您希望收到,這將會使口譯的空間更小的東西。 – edwardsmatt 2011-04-21 01:48:42

+0

-1,請參閱edwardTheGreat對如何發佈具有詳細信息的問題的評論,以便我們不必猜測您的確切要求。 – camickr 2011-04-21 02:16:17

回答

1

拆分兩次。先引用,然後在空格上。

+0

-1,請解釋這是如何工作的(一二三四五),我會刪除我的downvote。我懷疑海報想要4個代幣。第一個「一」,第二個「二」,第三個「三四」和第四個「五」。 – camickr 2011-04-21 02:13:00

+0

奇數標記將位於引號內,因此不要將它們分隔開。 報價分割收益率爲「一二」,「三四」,「五」。只分割空間上的偶數標記,你會得到「一個」,「兩個」,「三個四個」,「五個」 – Adam 2011-04-21 03:24:45

+0

的好處。 但StringTokenizer需要'returnDelims'標誌。如果設置爲true,它將返回分隔符作爲標記,例如'''。因此,如果您在引用標記中使用引號分隔符來迭代標記,那麼您知道下一個標記是帶引號的字符串。之後的令牌將再次成爲''',等等。 – Adam 2011-04-21 04:18:22

0

假設其他的解決方案不會爲你工作,因爲他們沒有正確地檢測匹配的引號或忽略引用文本內的空間,你可以試試:

private void addTokens(String tokenString, List<String> result) { 
    String[] tokens = tokenString.split("[\\r\\n\\t ]+"); 
    for (String token : tokens) { 
     result.add(token); 
    } 
} 

List<String> result = new ArrayList<String>(); 
while (input.contains("\"")) { 
    String prefixTokens = input.substring(0, input.indexOf("\"")); 
    input = input.substring(input.indexOf("\"") + 1); 
    String literalToken = input.substring(0, input.indexOf("\"")); 
    input.substring(input.indexOf("\"") + 1); 

    addTokens(prefixTokens, result); 
    result.add(literalToken); 
} 

addTokens(input, result); 

注意,這將不處理不平衡報價,逃脫的報價或其他錯誤/錯誤輸入的情況。

0
import java.util.StringTokenizer; 
class STDemo { 
    static String in = "token1;token2;token3" 

    public static void main(String args[]) { 

     StringTokenizer st = new StringTokenizer(in, ";"); 

     while(st.hasMoreTokens()) { 
      String val = st.nextToken(); 
      System.out.println(val); 
     } 
    } 
} 

這是簡單的方法來串記號化