0

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

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

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

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

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

导入 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();
    }
}
4

1 回答 1

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));  
}  
于 2011-07-30T15:27:31.703 回答