文章目录
背景介绍
在用Java做一个自动字段解析拆分的应用时,发现以竖杠(’|’)分隔的字符串无法通过split进行分隔无效,但并未报异常,字符串全部以逗号分隔成一个一个的字符。因此查了一下材料,发现凡是通过正则表达式匹配的函数,对于一些特殊符号都无法正常识别和处理,如’+‘、’|‘、 ’*‘、’.‘、’?‘、'$'
。解决办法很简单,及时在特殊字符的外面,增加一个中括号'[]'
,如将’|'替换为'[|]'
即可。深层次的原因是因为正则表达式将这些符号作为逻辑运算的一部分,如*在正则表达式中代表的是0->n的任意匹配,+则是1->n的匹配,?则是0->1的匹配,|则为或的逻辑符号等等。
java字符串使用replace、replaceall、split处理’+‘、’|‘、 ’*‘、’.‘、’?‘、'$'
等字符无效的2种异常表现方式:
- java字符串使用replace、replaceall、split处理
’|‘、’.‘、'$'
等字符无异常,但结果未达到预期;// | 分隔符时如下 ,A,c,t,i,o,n,|,C,o,m,e,d,y,|,R,o,m,a,n,c,e, // $分隔时如下 Action$Comedy$Romance
- java字符串使用replace、replaceall、split处理
’+‘、’?‘、'*'
等字符报异常,无法正常执行;
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
? // 此处根据字符不同,提示的会有所差异
^
at java.util.regex.Pattern.error(Pattern.java:1957)
at java.util.regex.Pattern.sequence(Pattern.java:2125)
at java.util.regex.Pattern.expr(Pattern.java:1998)
at java.util.regex.Pattern.compile(Pattern.java:1698)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.replaceAll(String.java:2223)
at com.troll.bigdata.component.example.elasticsearch.ExampleTest.main(ExampleTest.java:22)
案例一、java使用split不能处理竖杠(’|’),加好(’+’)等字符
public class ExampleTest {
public static void main(String[] args) {
// 字符串
String str = "Action|Comedy|Romance";
// 字符串split示例
String[] e1 = str.split("|");
for (String s : e1) {
System.out.print(s+" ");
}
System.out.println();
}
}
输出效果如下:
A c t i o n | C o m e d y | R o m a n c e
解决办法:
对于特殊符号,在特殊字符外加[],如: | => [|] , % => [%], + => [+]
public class ExampleTest {
public static void main(String[] args) {
// 字符串
String str = "Action|Comedy|Romance";
// 字符串split示例
String[] e1 = str.split("|");
for (String s : e1) {
System.out.print(s+" ");
}
System.out.println();
}
}
输出效果如下:
Action Comedy Romance
案例二、java使用replcaceall或replace处理字符串时,无法正常替换
public class ExampleTest {
public static void main(String[] args) {
// 字符串
String str = "Action|Comedy|Romance";
// 字符串符号替换示例
String e2 = str.replaceAll("|",",");
// 打印字符串
System.out.println(e2);
}
}
输出效果如下:
,A,c,t,i,o,n,|,C,o,m,e,d,y,|,R,o,m,a,n,c,e,
java无法使用特殊符号进行replcace和replaceall解决办法:
public class ExampleTest {
public static void main(String[] args) {
// 字符串
String str = "Action|Comedy|Romance";
// 字符串符号替换示例
String e2 = str.replaceAll("[,]",",");
// 打印字符串
System.out.println(e2);
}
}
输出效果如下:
Action,Comedy,Romance