今天在项目中使用Java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常:



1 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \^



在regex中"\\"表示一个"\",在java中一个"\"也要用"\\"表示。这样,前一个"\\"代表regex中的"\",后一个"\\"代表java中的"\"。所以要想使用replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),则需要这样写:str.replaceAll("\\\\","");

  写一段测试代码演示上面出现的异常:



1 String s="C:\盘";
2 s.replaceAll("\\","");



  使用上面的代码会导致



1 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \^



  要想将"C:\盘"中的"\"替换成空字符串,正确的写法是:



1 s.replaceAll("\\\\","");



  这样就可以正常替换了。

split

  1. 可以使用正则表达式,
  2. 注意: |, ., &, *, + 是转义字符, 要加\\

使用特殊字符切割字符串的三种方法

一、转义字符

(1) “|” 分隔串时虽然能够执行,但是却不是预期的目的,转义后即可得到正确的结果。

//String[] s = "aaa|bbb|ccc".split("|"); 
//正确方法如下
String[] s = "aaa|bbb|ccc".split("\\|");

(2)星号 * 分隔字符串运行将抛出Java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

String[] aa = "aaa*bbb*ccc".split("*"); 
//正确方法如下
String[] aa = "aaa|bbb|ccc".split("\\*");

(3)在串中使用”“字符,则也需要转义.首先要表达”aaaa\bbbb”这个串就应该用”aaaa\ \bbbb”,如果要分隔就应该这样才能得到正确结果:

String[] s = "aaa\\bbb\\bccc".split("\\\\");

(4) 还有就是点号”.”,也要首先转义才能得到正确的结果。

二、把切割字符,赋给一个String变量中

String a = "&";
String[] s = "aaa&bbb&ccc".split(a);

其余特殊字符未亲测,效果应该一样

三、使用转义字符

这种方法没有亲测

点的转义:. ==> u002E 
美元符号的转义:$ ==> u0024 
乘方符号的转义:^ ==> u005E 
左大括号的转义:{ ==> u007B 
左方括号的转义:[ ==> u005B 
左圆括号的转义:( ==> u0028 
竖线的转义:| ==> u007C 
右圆括号的转义:) ==> u0029 
星号的转义:* ==> u002A 
加号的转义:+ ==> u002B 
问号的转义:? ==> u003F 
反斜杠的转义: ==> u005C

String str2="a&b&c"; 
String strs[]=str2.split("//u0024"); 
for(String str:strs){ 
System.out.println(str); 
}

如果是两个&&号那就//u0024//u0024了




今天在项目中使用Java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常:



1 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \^



在regex中"\\"表示一个"\",在java中一个"\"也要用"\\"表示。这样,前一个"\\"代表regex中的"\",后一个"\\"代表java中的"\"。所以要想使用replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),则需要这样写:str.replaceAll("\\\\","");

  写一段测试代码演示上面出现的异常:



1 String s="C:\盘";
2 s.replaceAll("\\","");



  使用上面的代码会导致



1 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \^



  要想将"C:\盘"中的"\"替换成空字符串,正确的写法是:



1 s.replaceAll("\\\\","");



  这样就可以正常替换了。

split

  1. 可以使用正则表达式,
  2. 注意: |, ., &, *, + 是转义字符, 要加\\

使用特殊字符切割字符串的三种方法

一、转义字符

(1) “|” 分隔串时虽然能够执行,但是却不是预期的目的,转义后即可得到正确的结果。

//String[] s = "aaa|bbb|ccc".split("|"); 
//正确方法如下
String[] s = "aaa|bbb|ccc".split("\\|");

(2)星号 * 分隔字符串运行将抛出Java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

String[] aa = "aaa*bbb*ccc".split("*"); 
//正确方法如下
String[] aa = "aaa|bbb|ccc".split("\\*");

(3)在串中使用”“字符,则也需要转义.首先要表达”aaaa\bbbb”这个串就应该用”aaaa\ \bbbb”,如果要分隔就应该这样才能得到正确结果:

String[] s = "aaa\\bbb\\bccc".split("\\\\");

(4) 还有就是点号”.”,也要首先转义才能得到正确的结果。

二、把切割字符,赋给一个String变量中

String a = "&";
String[] s = "aaa&bbb&ccc".split(a);

其余特殊字符未亲测,效果应该一样

三、使用转义字符

这种方法没有亲测

点的转义:. ==> u002E 
美元符号的转义:$ ==> u0024 
乘方符号的转义:^ ==> u005E 
左大括号的转义:{ ==> u007B 
左方括号的转义:[ ==> u005B 
左圆括号的转义:( ==> u0028 
竖线的转义:| ==> u007C 
右圆括号的转义:) ==> u0029 
星号的转义:* ==> u002A 
加号的转义:+ ==> u002B 
问号的转义:? ==> u003F 
反斜杠的转义: ==> u005C

String str2="a&b&c"; 
String strs[]=str2.split("//u0024"); 
for(String str:strs){ 
System.out.println(str); 
}

如果是两个&&号那就//u0024//u0024了