Java - 使用多个分隔符时的String Parsing或split()错误

时间:2011-07-30 15:23:41

标签: java delimiter string-parsing

好的,你可能会说这是一个重复的帖子,但它是不同的。

我正在开发一个正在处理用户指定的某种删除分隔符的程序。如果分隔符只是一个字符(特殊或不特殊),我的程序正在工作。但是,如果用户输入是字符串,则会从消息字符串中删除分隔符的所有字符。

离。字符串消息=“ab \ nc [d] e {fMardk1g(h)i} j”; 输出将是:bcefghij 但预期的产出是abcdefghij

我是使用Pattern类的新手,所以我不知道问题出在哪里。

这是有问题的代码(我把它放在测试类中,所以我可以隔离问题):

import java.util.regex.Pattern;

public class ParsingTest {
    public static void main(String[] args) {
        String[] delimiters = { "Mardk1", "\n", "[", "]", "{", "}", "(", ")" };  
        StringBuilder regexp = new StringBuilder("");  
        regexp.append("[");  
        for(String s : delimiters) {  
            regexp.append("[");  
            regexp.append(Pattern.quote(s));  
            regexp.append("]");  
        }  
        regexp.append("]");  

        String message = "ab\nc[d]e{fMardk1g(h)i}j";  
        StringBuilder result = new StringBuilder("");  
        String[] a = message.split(regexp.toString());  
        for(String string : a) {  
            result.append(string);
        }
        System.out.println(result);
        for(String str: a) System.out.print(str);
        System.out.println();
    }
}

1 个答案:

答案 0 :(得分:1)

您正在使用错误的分组构造。你正在构建一个类似于[xyz]的模式,它将匹配任何单个字符x,y或z。您希望匹配几个完整字符串中的任何一个,因此您需要正常的()样式分组和交替运算符(|)。有关更多详细信息,请查看Pattern文档。

尝试使用此代码来构建正则表达式:

for(String s : delimiters) {
    // We don't want to start with (|
    if (regexp.length() > 1)
    {
        regexp.append("|");
    }
    regexp.append(Pattern.quote(s));  
}