Java-使用多个分隔符时出现字符串解析或split()错误

Java-使用多个分隔符时出现字符串解析或split()错误,java,delimiter,string-parsing,Java,Delimiter,String Parsing,好吧,你可能会说这是一篇重复的文章,但它是不同的 我正在处理一个程序,该程序正在处理用户指定的某种类型的删除分隔符。如果分隔符仅为单个字符(特殊或非特殊),则我的程序正在运行。但是,如果用户输入是字符串,则会从消息字符串中删除分隔符的所有字符 例如String message=“ab\nc[d]e{fMardk1g(h)i}j”; 输出将为:bcefghij 但预期的产出是abcdefghij 我在使用Pattern类方面是新手,所以我不知道问题出在哪里 下面是有问题的代码(我将其放在测试类中,

好吧,你可能会说这是一篇重复的文章,但它是不同的

我正在处理一个程序,该程序正在处理用户指定的某种类型的删除分隔符。如果分隔符仅为单个字符(特殊或非特殊),则我的程序正在运行。但是,如果用户输入是字符串,则会从消息字符串中删除分隔符的所有字符

例如String message=“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();
    }
}

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

请尝试以下方法来构建正则表达式:

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

生成的正则表达式将包含
[Mardk1]
,它将由
M、a、r、d、k或1
中的任意一个字符进行分隔,这就是为什么您在输出中看不到
a
字符的原因。哦,tnx…您解决了我的问题。为什么有必要在words@JinShin:这是alternation运算符,表示它与这个或那个(等)匹配。因此“(ab | cd | ef)”将与“ab”、“cd”或“ef”匹配。