如果替换字符串包含特殊(某些正则表达式)字符,如何替换java中的字符串

时间:2014-12-10 06:22:06

标签: java regex string

我正在尝试替换java中的字符串,其中我的替换字符串包含与下面所示完全相同的特殊字符。

String s1 = char(1)+"abc"+char(1);
String s2 = "!@#$%^&*()-_`~";
String s3 = s.replaceAll(s1, s2);

以上编写的代码抛出java.lang.IllegalArgumentException:非法组引用

2 个答案:

答案 0 :(得分:1)

您应该使用常规replace代替replaceAll进行正则表达。

  

将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。

示例(http://ideone.com/HbV9eO

String s= "\u0001abc\u0001more\u0001abc\u0001";
String s1 = "\u0001abc\u0001";
String s2 = "!@#$%^&*()-_`~";
String s3 = s.replace(s1, s2);
System.out.println("new string = " + s3);

答案 1 :(得分:0)

{p> String.replace(CharSequence, CharSequence)正如Alexei Levenkov's answer中所建议的那样,如果你想用字面意思用另一个字符串替换字符串就可以了。

为了完整起见,如果你想用replaceAll进行文字字符串替换,你需要引用模式字符串和替换字符串,以便按字面处理它们(即没有任何特殊含义)。

inputString.replaceAll(Pattern.quote(pattern), Matcher.quoteReplacement(replacement));

Pattern.quote(String)创建一个与字面上匹配指定字符串的模式。

Matcher.quoteReplacement(String)为指定的字符串创建一个文字替换字符串。