如何分割字符串A,B,C,D," E,F",G,H

时间:2017-02-03 09:44:15

标签: java regex string

我想将此字符串A,B,C,D,"E,F",G,Hcomma(,)运算符拆分,但不拆分"E,F" ..我想要以下输出。

A
B
C
D
E,F
G
H

5 个答案:

答案 0 :(得分:0)

这可能有所帮助:

    String s = "A,B,C,D,\"E,F\",G,H";
    String[] tmp = s.split(",\"|\",");
    List<String> result = new ArrayList<>();

    for(int i=0; i<tmp.length; i++) {
        if (i % 2 == 0) {
            result.addAll(Arrays.asList(tmp[i].split(",")));
        }else {
            result.add(tmp[i]);
        }
    }

result列表包含元素

答案 1 :(得分:0)

这个简单的正则表达式将匹配以"之外的逗号结尾的任何字符串:"([^\",]*\"[^\"]*\")*[^\",]*(,|$)",因此您可以将字符串拆分为逗号或与正则表达式匹配的结束字符串,就像在此函数中一样:

private static List<String> splitByComma(String s) {
    List<String> output = new ArrayList<>();
    Pattern pattern = Pattern.compile("([^\",]*\"[^\"]*\")*[^\",]*(,|$)");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find() && matcher.start() < s.length()) {
        output.add(s.substring(matcher.start(), (matcher.end() == s.length())?matcher.end():matcher.end() - 1));
    }
    return output;
}

答案 2 :(得分:0)

这是一种不使用正则表达式的方法:

private static List<String> splitQuoted(String string) {
    List<String> res = new ArrayList<>();
    int idx = 0;
    int start = 0;
    boolean inQuote = false;
    while (idx < string.length()) {
        char ch = string.charAt(idx++);
        if (ch == '"') {
            inQuote = !inQuote;
        } else {
            if (ch == ',' && !inQuote) {
                res.add(string.substring(start, idx - 1));
                start = idx;
            }
        }
    }
    if (start != idx)
        res.add(string.substring(start));
    return res;
}

随着输入字符串的增长,它应该可以很好地扩展,因为它只是向前看。您可以使用char[]数组而不是String.charAt()来进一步提高效率。它还会在输出值中留下引号字符,但是在你去的时候删除它们是相当简单的。

答案 3 :(得分:0)

正则表达式以实现预期结果:

String stringToSearch = "A,B,C,D,\"E,F\",G,H";
Pattern p1 = Pattern.compile("(?:[^\",]+|\"[^\"]+\")+");
Matcher m = p1.matcher(stringToSearch);
while (m.find())
{   
    System.out.println(m.group());
}

答案 4 :(得分:-3)

您可以使用replace();

来修复它
String replaceString=s1.replace("\"","");//replaces all occurrences of "\"" to ""  

然后拆分。