使用引号拆分Java字符串

使用引号拆分Java字符串,java,csv,Java,Csv,可能重复: 我需要在Java中拆分字符串。分隔符是空格字符。 字符串可能包括成对的引号(内有一些文本和空格)-成对引号内的整个正文应视为单个标记。 例如: 输入: 令牌1“令牌2”令牌3 输出:由3个元素组成的数组: 令牌1 令牌2 令牌3 怎么做? 谢谢 分开两次。首先是引号,然后是空格。假设其他解决方案不适用于您,因为它们无法正确检测匹配引号或忽略引号文本中的空格,请尝试以下操作: private void addTokens(String tokenString, List<Str

可能重复:

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

输入: 令牌1“令牌2”令牌3 输出:由3个元素组成的数组: 令牌1 令牌2 令牌3 怎么做?
谢谢

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

假设其他解决方案不适用于您,因为它们无法正确检测匹配引号或忽略引号文本中的空格,请尝试以下操作:

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);
private void addTokens(字符串tokenString,列表结果){
String[]tokens=tokenString.split([\\r\\n\\t]+);
for(字符串标记:标记){
结果。添加(令牌);
}
}
列表结果=新建ArrayList();
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(预挤压、结果);
结果.添加(literalToken);
}
addTokens(输入、结果);
请注意,这不会处理不平衡引号、转义引号或其他输入错误/格式错误的情况

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

这是一种简单的字符串标记化方法

发布输入文本的示例,然后发布您希望收到的内容,这将减少解释的空间。-1,请参阅爱德华大帝关于如何发布问题的评论,其中包含详细信息,这样我们就不必猜测您的确切要求。-1,请解释如何使用(一个或两个)三个四个五),我将删除我的否决票。我怀疑海报需要四个代币。第一个“一”,第二个“二”,第三个“三四”和第四个“五”。奇数代币将在引号内,所以不要在空格上拆分。引号拆分会产生“一个二”,“三个四”,“五”。只在空格上拆分偶数代币,您将得到”“一”、“二”、“三四”、“五”很好。但是StringTokenizer使用一个
returnDelims
标志。如果设置为true,它将以标记的形式返回分隔符,即“.”。因此,当您在引用拆分的标记上迭代时,如果您遇到一个引用标记,那么您知道下一个标记是一个引用字符串。之后的下一个标记是'“再重复一遍,如此类推。解决方案并不像你最初的回答那样简单。您需要异常处理。然而,在一个简单的情况下,您不必担心嵌入的引号,它的效果相当好。我会发布一些我想出的代码。请随意更改/删除代码。否决票被删除。
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); 
        } 
    } 
}