问题引入:
这是我在使用Java正则表达式时,需要将已有的正则表达式和用户输入的字符串进行拼接,然后将新的字符串当作一个正则表达式来使用,这时,问题来了,如果用户输入连续的星号* 或者连续的加号+ 或者是反斜杠\ 就会导致String.matches()则会抛出异常PatternSyntaxException
为了解决这个问题,就需要对用户输入的字符进行转义.
代码如下:
public static void main(String[] args) {
//字符串a\bc\de\fg中有3个反斜杠'\',将反斜杠进行转移为双反斜杠\\
String str1 = "a\\bc\\de\\fg";
System.out.println(str1);
String result = str1.replaceAll("\\\\", "\\\\\\\\");
System.out.println(result);
//方法二,用replace()
result = str1.replace("\\", "\\\\");
System.out.println("2:" + result);
//字符串a****bcd中有4个星号,转义星号*
String str2 = "a****bcd";
System.out.println(str2);
String result2 = str2.replaceAll("\\*", "\\\\*");
System.out.println(result2);
//字符串a++++bcd中有4个星号,转义加号+
String str3 = "a++++bcd";
System.out.println(str3);
String result3 = str3.replaceAll("\\+", "\\\\+");
System.out.println(result3);
}