Java 从字符串中删除一组特殊字符

Java 从字符串中删除一组特殊字符,java,regex,Java,Regex,我需要从字符串中删除一组特殊字符(即,[]'?!+-,)。 典型的独占解决方案replaceAll(“[^a-zA-Z0-9]”,“)不正常,因为我只需要删除这些字符,还需要保存包含希腊字符的文本。例如: public static void test_regex() { ArrayList<String> tests = new ArrayList<>(); tests.add("------."); tests.add("+[---].");

我需要从字符串中删除一组特殊字符(即,
[]'?!+-,
)。 典型的独占解决方案
replaceAll(“[^a-zA-Z0-9]”,“)
不正常,因为我只需要删除这些字符,还需要保存包含希腊字符的文本。例如:

public static void test_regex() {
    ArrayList<String> tests = new ArrayList<>();
    tests.add("------.");
    tests.add("+[---].");
    tests.add("------?");
    tests.add("---]〛");
    tests.add("A++[---].");
    tests.add("AV[---]S");

    for (String s : tests) {
        String becomes = s.replaceAll("[.-\\\\,]", "");
        System.out.println(s + " becomes <" + becomes + ">");
    }
}
公共静态无效测试\u regex(){
ArrayList tests=新的ArrayList();
测试。添加(“----”);
测试。添加(“+[--]”);
测试。添加(“----?”);
测试。添加(“--]〛”);
添加(“A++[--]”;
测试。添加(“AV[-]S”);
用于(字符串s:测试){
字符串变为=s.replaceAll(“[.-\\\\,]”,“”);
System.out.println(s+“变为”);
}
}
应该作为一种输出

------. becomes <>
+[---]. becomes <>
------? becomes <>
---]〛 becomes <>
A++[---]. becomes <A>
AV[---] becomes <AV>
----。变成
+[---]. 变成
------? 变成
---]〛成为
A++[--]。变成
AV[--]变为
但我不能。我成功地用
[.-]
删除了
-
,但随后我添加了
\[
并破坏了所有内容(也尝试了
\\\\\[
\\\\\\\\[
),之前工作过的
也不再工作了


如何转义这些字符中的每一个?

您可以使用以下正则表达式替换来清除所有不需要的字符:

String becomes = s.replaceAll("[ \\]\\[.\\\\,+?-]+", "");
  • 您需要在字符类中包含所有其他不需要的字符,如
    [,],+,?,|
  • 最好在此处使用量词
    +
    ,以获得更好的性能
  • 请记住在字符类中的第一个或最后一个位置放置一个未开槽的连字符

您可以使用以下正则表达式替换来删除所有不需要的字符:

String becomes = s.replaceAll("[ \\]\\[.\\\\,+?-]+", "");
  • 您需要在字符类中包含所有其他不需要的字符,如
    [,],+,?,|
  • 最好在此处使用量词
    +
    ,以获得更好的性能
  • 请记住在字符类中的第一个或最后一个位置放置一个未开槽的连字符

对连字符进行转义。或始终将其保留在字符类的开头/结尾。
字符串变为=s.replaceAll(“[\]\\\[.\\\\\,+?-]+”,“”)好了,我重新打开DUP,因为中间的连字符只是问题的一部分。避免连字符。或者总是把它放在字符类的开始/结束。<代码> String变成= S.RePATALL(“\\\\[\\,+-+]”,“”)。请将AUBHAVA发布为答案,这样我就可以接受。这是完美的。好的,我重新打开DUP,因为中间的连字符只是问题的一部分。