Java replaceAll转义字符变为双重转义

时间:2013-11-07 12:36:48

标签: java android regex replace

我有一个从输入字段收到的字符串值。

String searchingText = getText();

收到字符串后,我搜索此字符串。但如果字符串包含\符号,则我的搜索失败。

我知道特殊字符并尝试替换:

searchingText = searchingText.replaceAll("\\","\\\\");

但是它给了我错误,应用程序被关闭了。

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

经过研究,我创建了一个正则表达式,并尝试用匹配器替换:

    Map<String,String> sub = new HashMap<String,String>();
    sub.put("\n", "\\\\n");
    sub.put("\r", "\\\\r");
    sub.put("\t", "\\\\t");

    StringBuffer result = new StringBuffer();
    Pattern regex = Pattern.compile("\\n|\\r|\\t");
    Matcher matcher = regex.matcher(bodySearchText);

最后我想要一个字符串 - searchingText = \\而不是searchingText = \

请任何解决方案。

2 个答案:

答案 0 :(得分:2)

你应该这样做:

string = string.replaceAll("\\\\", "\\\\\\\\");

请注意,在Java中,\被写为\\。因此replaceAll会将\\视为\,这不是您想要的。

相反,您可以使用接受String而不是正则表达式的replace

答案 1 :(得分:0)

更改此

searchingText = searchingText.replaceAll("\\","\\\\");

searchingText = searchingText.replaceAll("\\\\","\\\\\\");

replaceAll()\\作为\

有关详细信息,请参阅here