如何使用分隔符内部值拆分下面的字符串

时间:2017-12-21 16:24:58

标签: java delimiter

我有以下字符串和分隔符*

String temp=""Test1*Test2"*Test3*Test4"; 

要求如下:

"Test1*Test2"
Test3
Test4

split(\\*)无效,它给出了这样的结果:

"Test1
Test2"
Test3
Test4

您能否根据需要建议我应该使用哪个分隔符时间来分割字符串。

2 个答案:

答案 0 :(得分:1)

当很容易编写正则表达式来匹配分隔符时,split()方法很棒。 例如,您可以轻松地沿逗号分割字符串:String.split(",");.

但是当分割内容中出现分隔符时,该方法很糟糕。

常见的工作是沿逗号分割字符串,除非这些逗号以双引号显示。 这样的字符串可能是CSV文件中的一行。

在这种情况下,编写与要保留在数组中的内容匹配的正则表达式要容易得多, 并使用Matcher.find()而不是String.split()。

public static void main(String[] args) {
    String regex = "\"[^\"]*\"|[^\\*]+";
    String temp = "\"Test1*Test2\"*Test3*Test4";         
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(temp);
    while(m.find()){
        System.out.println(m.group());
    }
} 

正则表达式将一对双引号与除引号之间的双引号或一系列不包含星号(*)的字符匹配。

答案 1 :(得分:0)

String [] csvRawData = line.split(delimiter);

            for(int i = 0; i < csvRawData.length; i++) {
                if(csvRawData[i].startsWith("\"")) {
                    if(csvRawData[i+1].endsWith("\"")) {
                        csvRawData[i] = csvRawData[i] + "*" + csvRawData[i+1];                          
                        csvRawData = (String[]) ArrayUtils.remove(csvRawData, 1);                   
                    }
                }
            }