使用引号拆分Java字符串

时间:2011-04-21 01:38:02

标签: java csv

  

可能重复:
  Can you recommend a Java library for reading (and possibly writing) CSV files?

我需要在Java中拆分String。分隔符是空格字符。 字符串可能包括成对的引号(内部有一些文本和空格) - 配对引号内的整个主体应被视为单个标记。 例如:

 
Input:
       token1 "token 2"  token3

Output: array of 3 elements:
         token1
         token 2
         token3  

怎么做? 谢谢!

3 个答案:

答案 0 :(得分:1)

拆分两次。首先是引号,然后是空格。

答案 1 :(得分: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);

请注意,这不会处理不平衡报价,转义报价或其他错误/格式错误输入的情况。

答案 2 :(得分: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); 
        } 
    } 
}

这是字符串标记化的简便方法