好的,你可能会说这是一个重复的帖子,但它是不同的。
我正在开发一个正在处理用户指定的某种删除分隔符的程序。如果分隔符只是一个字符(特殊或不特殊),我的程序正在工作。但是,如果用户输入是字符串,则会从消息字符串中删除分隔符的所有字符。
离。字符串消息=“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();
}
}
答案 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));
}