分裂Java字符串用引号

问题描述:

可能重复:
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

拆分两次。先引用,然后在空格上。

+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

假设其他的解决方案不会为你工作,因为他们没有正确地检测匹配的引号或忽略引用文本内的空间,你可以试试:

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); 

注意,这将不处理不平衡报价,逃脱的报价或其他错误/错误输入的情况。

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); 
     } 
    } 
} 

这是简单的方法来串记号化