java正则表达式陷阱
来源:互联网 发布:成都建信软件 编辑:程序博客网 时间:2024/05/16 15:09
直接看代码:
publicclass StringSplit{ publicstaticvoid mian(String [] args){ String str = "java.ix?sdcc.dddd"; //将这个字符串以点好(.)分隔成多个字符 String[] strArr = str.split("."); for(String s : strArr){ System.out.println(s); } } }
上面程序非常简单,提供了一个包含多个点号(.)的字符串,接着调用String提供的Split()方法,以点号(.)作为分隔符来分隔这个字符串,希望返回该字符串被分割后得到的字符串数组。运行改程序,结果发现程序什么都没有输出。
jdk1.4开始,java的string类提供了split()方法进行字符串分割,jdk1.0原来提供StringTokenizer基本上已经是“历史遗留物”了,读者可不必研究。
⑴String 提供的Split(String regex)方法需要的参数是正则表达式;
⑵ 正则表达式中的点号(.)可以匹配任意字符。
publicclass StringSplit { publicstaticvoid main(String[] args){ String str ="java.ix?sdcc.dddd"; //将这个字符串以点号(.)分隔成多个字符 String[] strArr = str.split("\\."); for(String s: strArr){ System.out.println(s); } }}
运行上面的程序就可以看到字符串以点号(.)分隔的结果,这就是需要的结果。由此可见,这并不是java的bug,是对java某些特性账户哦不够精确造成的误解。
下面看在看一个demo
publicclass StringReplace { publicstaticvoid mian(String[] args) { String clazz = "org.com.xxxx.sss.yyyy"; //使用 replace就此简单 String path1 = clazz.replace(".","\\"); System.out.println(path1); //使用replaceAll复杂多了 String path2 = clazz.replaceAll("\\","\\\\"); System.out.println(path2); } }
上面程序提供了clazz字符串,然后试图将该字符串中的点号(.)替换成反斜杠(\)。如果程序使用replace方法进行替换,
因为replace()方法的参数只是普通字符串,并不是正则表达式,所以使用clazz.replace(“.”,“\”)即可。
如果使用repalceAll方法进行替换,因为replace()的参数是正则表达式,所以第一个参数需要写作“\.”,
其中\用于生成转义的反斜杠线,第二个参数为“\\”其中前两条斜线生成转义的反斜线,后两条斜线生成要替换的反斜线。
0 0
- java正则表达式陷阱
- Java表达式的陷阱——正则表达式的陷阱
- 1.6 正则表达式陷阱
- QT的正则表达式陷阱
- java表达式陷阱
- JAVA 条件表达式 陷阱
- java 之 表达式中的陷阱
- java 字符串,表达式,等陷阱
- 关于Java表达式中的陷阱
- Java表达式的陷阱——表达式类型的陷阱
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java表达式的陷阱——关于字符串的陷阱
- Java表达式的陷阱——多线程的陷阱
- 疯狂java笔记:表达式中的陷阱
- 疯狂Java笔记之表达式中的陷阱
- Spring MVC的@ResponseBody返回JSON串
- Android Studio关联源码与查看的方法
- LeetCode_Count and Say
- 矩阵知识
- Extjs Grid 加载数据.分页。传值,
- java正则表达式陷阱
- 浅谈算法和数据结构: 二叉查找树
- sed和grep操作
- Extjs grid 加载数据,分页,传值
- 使用Android源生解析xml文件
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 【博弈】【裸题】NIM游戏的食用方法
- 今天建博客
- java.net.InetAddress类的使用