转义字符的理解(JAVA、字符串和正则表达式)
一、原理总结:
要理解转义,首先要从正则表达式说起。
在正则表达式中:
*和\是特殊字符;为了匹配这两个字符本身,正则表达式中需要写为\*和\\在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 的专栏 - CSDN 博客 https://blog.csdn.net/stewen_001/article/details/22871737
转义字符的理解(JAVA、字符串和正则表达式)的更多相关文章
- 深入理解JAVA字符串常量池
初学JAVA时,在学习如何比较两个字符串是否相等,大量资料告诉我,不能用等于号( = )去比较,需要使用equals方法,理由是String是一个对象,等号此时比较的是两个字符串在java内存堆中的地 ...
- java 字符串(正则表达式)未完
正则表达式: 其实就是用于操作字符串的一个规则.(以某种方式描述字符串) 基础: 1.描述一个整数:\d(表示一位数字) \\d(\\ 表示要插入一个正则表达式)表示一位数字 \\\\ 插入一个普通 ...
- 理解Java字符串常量池与intern()方法
String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...
- java字符串根据正则表达式让单词首字母大写
public class Da { public static void main(String[] args) { String s = "hello_*java_*world" ...
- java字符串利用正则表达式分割
平时用到,整理的,总感觉缺点什么: private String getKeywordByContent(String content) { StringBuffer sbAllKwyword = n ...
- 理解 Java 正则表达式怪异的 \\ 和 \\\\,让您见怪不怪
本文链接 https://unmi.cc/understand-java-regex-backslash/, 来自 隔叶黄莺 Unmi Blog Java 语言里的几大变革,一为 jdk1.4 引入的 ...
- java字符串函数及理解
Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理允许Java提供十分丰富的功能特性 ...
- java中使用正则表达式匹配字符串
在Java中使用正则表达式去匹配相应的字符串: String importFileRole = "(import)\\s*[a-zA-Z0-9_<>.]+\\;";// ...
- android java 字符串正则表达式 分离特殊字符串
Java中正则表达式的使用 在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串.或者对字符串进行分割.或者对字符串一些字符进行替换/删除,一般会通过if-else.for 的 ...
随机推荐
- Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动
右键项目名->属性->启动项目->单启动项目,在下拉框中选择你的网站主项目就可以了.(由于用的英文版,所以翻译的内容可能略有差异)
- C语言之指针基础概念
今天就写一下关于C语言指针的一些感想吧. 很多同学都搞不懂指针,我一开始也云里雾里没看懂指针,而且老师又把指针说得很难的样子.其实主要是把指针”*“的作用给弄混了,不用畏惧,细心点看就可以了. 首先简 ...
- emacs 中使用git diff命令行
在shell中执行git diff命令,常常会看到例如以下警告信息: terminal is not fully functional 事实上非常easy,配置一下就可以. git config -- ...
- 【JavaScript】一个同步于本地时间的动态时间
这样例很easy.了解JavaScript之后就是几行的代码便可以完毕的事情. 可是对于一些未接触过JavaScript的人来说,差点儿非常大project的样子.然后在网上苦苦寻觅代码,之后在茫茫的 ...
- atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践
atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践 1. 什么是无为而治 1 2. 无为而治的三个原则 1 3. 抓大放小 1 4. 治理国家 2 5. 企业管理 2 6. 教育领域 ...
- ZOJ 3703 Happy Programming Contest(0-1背包)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3703 Happy Programming Contest Time Lim ...
- 在元素的装载数量明确的时候HashMap的大小应该如何选择。
今天看到美团招聘给出了一道小题目,关于HashMap的性能问题.问题如下: java hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why? 要回答这个问题,首 ...
- LNK2019: 无法解析的外部符号(函数实现没有加namespace前缀导致)
问题描述: 在A.h中,我写了如下函数 namespace XXX { void func(); } 在A.cpp中,我写了如下实现 #include "A.h" using na ...
- Cannot change version of project facet Dynamic Web Module to 3.0 requires Java 1.6 or newer 解决方案
Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:Description Resource Path Location TypeDynamic Web Module 3.0 r ...
- JavaScript函数内部修改全局变量的问题【一道面试题】
JavaScript函数内部修改全局变量的问题 今天 10:44梵天莲华 | 浏览 23 次 Javascript编程语言函数 修改标签 代码如下,为什么加了 function a(){};这个函数 ...
- 语言的转义字符及正则表达式的转义字符的表示 - March On - 博客园 https://www.cnblogs.com/z-sm/p/6944850.html
注:这个对我的影响最大,仔细看懂就好了; - java 转义符 | - cucarcha 的专栏 - CSDN 博客 https://blog.csdn.net/stewen_001/article/details/22871737
初学JAVA时,在学习如何比较两个字符串是否相等,大量资料告诉我,不能用等于号( = )去比较,需要使用equals方法,理由是String是一个对象,等号此时比较的是两个字符串在java内存堆中的地 ...
正则表达式: 其实就是用于操作字符串的一个规则.(以某种方式描述字符串) 基础: 1.描述一个整数:\d(表示一位数字) \\d(\\ 表示要插入一个正则表达式)表示一位数字 \\\\ 插入一个普通 ...
String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...
public class Da { public static void main(String[] args) { String s = "hello_*java_*world" ...
平时用到,整理的,总感觉缺点什么: private String getKeywordByContent(String content) { StringBuffer sbAllKwyword = n ...
本文链接 https://unmi.cc/understand-java-regex-backslash/, 来自 隔叶黄莺 Unmi Blog Java 语言里的几大变革,一为 jdk1.4 引入的 ...
Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理允许Java提供十分丰富的功能特性 ...
在Java中使用正则表达式去匹配相应的字符串: String importFileRole = "(import)\\s*[a-zA-Z0-9_<>.]+\\;";// ...
Java中正则表达式的使用 在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串.或者对字符串进行分割.或者对字符串一些字符进行替换/删除,一般会通过if-else.for 的 ...
右键项目名->属性->启动项目->单启动项目,在下拉框中选择你的网站主项目就可以了.(由于用的英文版,所以翻译的内容可能略有差异)
今天就写一下关于C语言指针的一些感想吧. 很多同学都搞不懂指针,我一开始也云里雾里没看懂指针,而且老师又把指针说得很难的样子.其实主要是把指针”*“的作用给弄混了,不用畏惧,细心点看就可以了. 首先简 ...
在shell中执行git diff命令,常常会看到例如以下警告信息: terminal is not fully functional 事实上非常easy,配置一下就可以. git config -- ...
这样例很easy.了解JavaScript之后就是几行的代码便可以完毕的事情. 可是对于一些未接触过JavaScript的人来说,差点儿非常大project的样子.然后在网上苦苦寻觅代码,之后在茫茫的 ...
atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践 1. 什么是无为而治 1 2. 无为而治的三个原则 1 3. 抓大放小 1 4. 治理国家 2 5. 企业管理 2 6. 教育领域 ...
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3703 Happy Programming Contest Time Lim ...
今天看到美团招聘给出了一道小题目,关于HashMap的性能问题.问题如下: java hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why? 要回答这个问题,首 ...
问题描述: 在A.h中,我写了如下函数 namespace XXX { void func(); } 在A.cpp中,我写了如下实现 #include "A.h" using na ...
Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:Description Resource Path Location TypeDynamic Web Module 3.0 r ...
JavaScript函数内部修改全局变量的问题 今天 10:44梵天莲华 | 浏览 23 次 Javascript编程语言函数 修改标签 代码如下,为什么加了 function a(){};这个函数 ...