使用转义替换特殊字符在前面的Java特殊字符(Replace special character w

2019-07-04 11:30发布

在我的Java代码,如果一个字符串输入已得到所提及的任何特殊字符,应该让前面加\\

特殊字符集为{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \} 。 我试着用String.replaceAll(old,new)但让我吃惊它不工作,即使我给了“老”和“新”正确的价值观。

if old=":",new="\:"

我把特殊字符的字符串数组,迭代它在一个for循环,检查是否存在字符串中,如果是, input.replaceAll(":","\\:") 但它没有给我想要的输出。 请帮忙

String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
                "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };

    for (int i = 0; i < arr.length; i++) {
//'search' is my input string

        if (search.contains((String) arr[i])) {

            String oldString = (String) arr[i];

            String newString = new String("\\" + arr[i]);
            search = search.replaceAll(oldString, newString);
            String newSearch = new String(search.replaceAll(arr[i],
                    newString));


        }
    }

Answer 1:

一旦你意识到的replaceAll需要一个正则表达式,它只是一个编码字符你作为一个正则表达式的问题。

试试这个:

String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");

这怪诞的正则表达式是“向前看” - 非捕获断言下面的字符匹配的东西 - 在这种情况下,一个字符类。

请注意,你怎么不需要转义字符一个字符类,除] (甚至负不需要逃避,如果第一个或最后一个)。

\\\\是你如何编写一个正则表达式文字\ (于正则表达式Java换一次,连用)


下面是这个工作的一个测试:

public static void main(String[] args) {
    String search = "code:xy";
    String newSearch = search.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\-])", "\\\\");
    System.out.println(newSearch);
}

输出:

code\:xy


Answer 2:

String#replaceAll需要一个regex作为第一个参数。 所以,如果在字符串中输入的是你的代码将失败meta-character -像+

您应该使用String#replace

而且你不需要过去的分配: -

String newSearch = new String(search.replaceAll(arr[i], newString));

当你不使用它。 你实际上分配修改字符串返回到search ,所以它不是必需的。

此外,而不是使用new String(...)来构建新的字符串。 其实,你只需要在你的单行if-statement

现在好了,这种解释后,你现在可以使用下面的for-loop : -

for (int i = 0; i < arr.length; i++) {
    if (search.contains(arr[i])) {
        search = search.replace(arr[i], "\\" + arr[i]);
    }
}


Answer 3:

尝试使用下面的一个。 请使用替代方法来代替的replaceAll

搜索= search.replace(oldString,newString);



Answer 4:

当我尝试下面的代码,它的工作

String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
                    "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };

        for (int i = 0; i < arr.length; i++) {
    //'search' is my input string

            if (search.contains((String) arr[i])) {

                String oldString = (String) arr[i];

                String newString = new String("\\" + arr[i]);
                search = search.replaceAll(oldString,(String) ("\\" + newString));



            }
        }


文章来源: Replace special character with an escape preceded special character in Java