一、原理总结:

要理解转义,首先要从正则表达式说起。

  • 在正则表达式中:*\是特殊字符;为了匹配这两个字符本身,正则表达式中需要写为\*\\

  • 在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,也没问题。

五、参考:

  1. 语言的转义字符及正则表达式的转义字符的表示 - March On - 博客园 https://www.cnblogs.com/z-sm/p/6944850.html

    注:这个对我的影响最大,仔细看懂就好了;
  2. java 转义符 | - cucarcha 的专栏 - CSDN 博客 https://blog.csdn.net/stewen_001/article/details/22871737

转义字符的理解(JAVA、字符串和正则表达式)的更多相关文章

  1. 深入理解JAVA字符串常量池

    初学JAVA时,在学习如何比较两个字符串是否相等,大量资料告诉我,不能用等于号( = )去比较,需要使用equals方法,理由是String是一个对象,等号此时比较的是两个字符串在java内存堆中的地 ...

  2. java 字符串(正则表达式)未完

    正则表达式: 其实就是用于操作字符串的一个规则.(以某种方式描述字符串) 基础: 1.描述一个整数:\d(表示一位数字) \\d(\\ 表示要插入一个正则表达式)表示一位数字 \\\\  插入一个普通 ...

  3. 理解Java字符串常量池与intern()方法

    String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...

  4. java字符串根据正则表达式让单词首字母大写

    public class Da { public static void main(String[] args) { String s = "hello_*java_*world" ...

  5. java字符串利用正则表达式分割

    平时用到,整理的,总感觉缺点什么: private String getKeywordByContent(String content) { StringBuffer sbAllKwyword = n ...

  6. 理解 Java 正则表达式怪异的 \\ 和 \\\\,让您见怪不怪

    本文链接 https://unmi.cc/understand-java-regex-backslash/, 来自 隔叶黄莺 Unmi Blog Java 语言里的几大变革,一为 jdk1.4 引入的 ...

  7. java字符串函数及理解

    Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理允许Java提供十分丰富的功能特性 ...

  8. java中使用正则表达式匹配字符串

    在Java中使用正则表达式去匹配相应的字符串: String importFileRole = "(import)\\s*[a-zA-Z0-9_<>.]+\\;";// ...

  9. android java 字符串正则表达式 分离特殊字符串

    Java中正则表达式的使用 在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串.或者对字符串进行分割.或者对字符串一些字符进行替换/删除,一般会通过if-else.for 的 ...

随机推荐

  1. C# Oracle.ManagedDataAccess 批量更新表数据

    这是我第一次发表博客.以前经常到博客园查找相关技术和代码,今天在写一段小程序时出现了问题, 但在网上没能找到理想的解决方法.故注册了博客园,想与新手分享(因为本人也不是什么高手). vb.net和C# ...

  2. POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)

    #include<iostream> #include<string> #include<list> #include<map> #include< ...

  3. Atitit.md5 实现原理

    Atitit.md5 实现原理 1. 算法流程图2 2. MD5算法过程:2 2.1. 3. 处理分组数据3 3. MD5加密字符串实例5 4. Md5的历史7 4.1.1. MD27 4.1.2. ...

  4. Atitit。 沉思录 与it软件开发管理中的总结 读后感

    Atitit. 沉思录 与it软件开发管理中的总结 读后感 1. <沉思录>,古罗马唯一一位哲学家皇帝马可·奥勒留所著 2 2. 沉思录与it软件开发管理中的总结 2 2.1. 要有自己的 ...

  5. DDR 复位

    将FPGA代码和实际的数字电路对应起来. always @ (negedge clk_ref_200)     begin     if(ddr3_init_done)    'b10)   'b10 ...

  6. HDU 4969 Just a Joke(积分)

    HDU 4969 Just a Joke pid=4969" target="_blank" style="">题目链接 推公式,r′=dr/d ...

  7. AES_CBC_PKCS5Padding 加密

    在项目中需要对一些关键信息进行传输,但又不能是明文,所以采用此种方式进行加密,另一端再进行解密. AES: 算法 CBC: 模式 ​ 使用CBC模式,需要一个向量iv,可增加加密算法的强度 PKCS5 ...

  8. js模块化规范AMD、CMD、CommonJS...

    1. AMD 1.1 什么是AMD? AMD 英文名 Asynchronous Module Definition ,中文名 异步模块定义 .这是一个浏览器模块化开发的规范. 由于浏览器环境执行环境的 ...

  9. VirtualBox虚拟机和主机之间的通信

    - VirtualBox的NAT网络模式,主机不能访问虚拟机- 端口转发可以访问,但是性能非常差,第一次连接30秒左右- 有条件的还是推荐VmWare

  10. Ubuntu 12.04下PostgreSQL-9.1安装与配置详解(在线安装) [转]

    说明:       我是用root用户在终端登陆的,如果是非root用户,那在命令前需要加上"sudo",你懂的... 第一步:在Ubuntu下安装Postgresql       ...