一、原理总结:
要理解转义,首先要从正则表达式说起。
在正则表达式中:
*
和\
是特殊字符;为了匹配这两个字符本身,正则表达式中需要写为\*
和\\
在Java中,只能用字符串表示正则表达式,所以需要把
\*
和\\
转换成字符串的写法;在字符串中:
\
是转义字符,要表示\
本身,需要写为\\
;所以将这个和上面的一替换,正则表达式中的\*
和\\
写为字符串就变为了\\*
和\\\\
二、代码测试:
结合代码做说明,直接上代码:
package com.jd.ept.user.center.util;
public class Test {
public static void main(String[] args){
String t = "a\\|b||c||d";
System.out.println(t);
String t1="|";
String[] temp = t.split(t1);
System.out.println("测试一:单穿|分割的结果 :这个其实是错误");
System.out.println("长度:"+temp.length);
for (String s:temp){
System.out.print(s+"-");
}
System.out.println("【分割线】");
t1="\\|";
temp = t.split(t1);
System.out.println("测试二:|分割的结果");
System.out.println("长度:"+temp.length);
for (String s:temp){
System.out.print(s+"-");
}
System.out.println("【分割线】");
t1="\\|\\|";
temp = t.split(t1);
System.out.println("测试三:||分割的结果");
System.out.println("长度:"+temp.length);
for (String s:temp){
System.out.print(s+"-");
}
System.out.println("【分割线】");
t1="\\\\\\|";
temp = t.split(t1);
System.out.println("测试四:最终分割的结果");
System.out.println("长度:"+temp.length);
for (String s:temp){
System.out.print(s+"-");
}
}
}
三、代码输出结果:
四、代码解释说明:
原理和开头说的一致,代码中只是把*
替换为了|
。下面解释测试结果:
原始字符串是:a|b||c||d
4.1 测试一
测试一应该是个错误(暂时不理解,就把他归为错误)
因为在正则表达式中,|
是一个特殊字符,这个特殊字符应该匹配不到任何东西,或者说匹配的就是空白。
所以测试一的长度为10。输出就是每个字符都得到了匹配。
4.2 测试二
测试二:以|
本身来匹配,而正则表达式中要匹配|
本身,字符串中要表示为\|
所以最终长度为6。要注意,原始字符串中,两个|
之间会拆出来一个空白,这个需要注意;
4.3 测试三
测试三:以||
本身来匹配,即两个|
,正则表达式中要匹配两个|
本身,字符串中要表示为\|\|
所以最终长度为3,没问题。
4.4 测试四
测试四:以|
本身来匹配,正则表达式中要匹|
,字符串中要表示为\\\\\|
所以最终长度为2,也没问题。
五、参考:
- 语言的转义字符及正则表达式的转义字符的表示 - March On - 博客园 https://www.cnblogs.com/z-sm/p/6944850.html
注:这个对我的影响最大,仔细看懂就好了;
- java 转义符 | - cucarcha 的专栏 - **** 博客 https://blog.****.net/stewen_001/article/details/22871737
- 语言的转义字符及正则表达式的转义字符的表示 - March On - 博客园 https://www.cnblogs.com/z-sm/p/6944850.html
注:这个对我的影响最大,仔细看懂就好了; - java 转义符 | - cucarcha 的专栏 - **** 博客 https://blog.****.net/stewen_001/article/details/22871737