【java解惑】java字符串替换方法使用
2015-11-04 08:41
357 查看
如下代码:
(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
args) { String separator = File.separator; String clazzName = Example020.class.getName(); String rs1 = clazzName.replace(".", separator); // 方法1 String rs2 = clazzName.replaceAll("\\.", ] 分析说明: 上述代码是java字符串替换的三种方法。Java从1.5版本后提供了两种字符串替换方法:replace和replaceAll。这两个方法的功能相同,都能够替换字符串所有需要替换的字符(虽然命名很具有迷惑性)。不同的是,replace方法传入的参数是要被替换的字符和替换后的字符;replaceAll传入的是要被替换的字符和替换后字符的正则表示。 方法1中,传入要被替换的"."和替换后的文件分隔符(不同系统不同); 方法2中,由于"."在正则表达式中表示任何字符,如果直接传入".",则被操作字符串的所有内容都会被替换,所以这里需要加入转义,也就是"\\."。第一个\表示转义,而\本身又是特殊字符需要被转义,所以需要再次转义,所以是两个\。替换后字符传入的是"\\\\",\本身是windows文件路径分隔符,但是传入时需要转义,保证传入的是路径分隔符而不是转义符,所以传入的字符就需要2个\,加上字符串表示(表明传入的不是转义字符)需要2个\,共需要使用4个\来表达一个文件分隔符。如果这里传入的是两个\,在windows执行将会出现错误,而且这个错误的提示并不友好,导致很多时候完全无法定位错误缘由。值得注意的是,在linux下,这里就不需要这么麻烦,可以直接传入文件分隔符/即可。 //使用replaceAll,第二个参数传入"\\"的不友好错误提示 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:658) at java.util.regex.Matcher.appendReplacement(Matcher.java:762) at java.util.regex.Matcher.replaceAll(Matcher.java:906) at java.lang.String.replaceAll(String.java:2162) at cn.itape.java.disabuse.Example020.main(Example020.java:13)方法3中,从1.5以后,java提供了两个的方法,将字符串直接转化正则表达式形式,直接使用即可,避免了方法2中需要自己加入转义,减少错误发生的可能性。
(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)
源代码地址:https://github.com/rocwinger/java-disabuse
本文出自 “winger” 博客,谢绝转载!
相关文章推荐
- 【java解惑】字符串的字节数组构造函数使用
- 【java解惑】Unicode转义字符的使用(续)
- 【java解惑】Unicode转义符的使用
- 【java解惑】java字符串比较那些事儿
- 【java解惑】复合赋值与简单赋值
- 【java解惑】条件表达式结果类型规则
- 【java解惑】多重强转引发的问题
- 【java解惑】十六进制加法问题
- 【java解惑】长整数计算防止溢出
- 【java解惑】使用double进行小数运算
- Eclipse编译时Cannot run program "make":?????
- Eclipse调试之内存视图原理解析:调试开发者指南
- java基础学习(一)
- java基础学习(一)
- Java中的堆和栈的区别
- Java类的访问权限
- JAVA多线程之常用方法
- 复习javaIO 之File类
- The supplied javaHome seems to be invalid
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析