首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中字符串替换函数replace与replaceAll的区别

背景

业余时间又爬了下网站,这回碰到点问题,爬下来的数据有点奇葩。说是 xml 格式吧,又有些奇怪的东西,而且时不时来个,有效数据还被 和 包着在。这里我截取了部分贴出来:(为了方便查看,做了简单的格式化)

如何解析这个数据并不是难事,Jsoup轻松搞定,至于如何使用Jsoup,不是本文重点,这里不做介绍。

Jsoup解析数据时,只能解析到标签,比如上面的 title,通过Jsoup解析出来就是:

前面已经说过了,有效数据是 和 中间夹着的部分,如果就这么几个字串,那通过字符串截取方法也能轻松拿到有效数据。但是上面贴出来的只是局部,实际整个数据是一个list,里面有很多的 和 ,如果一个个去截取字串,无疑会很繁琐。

因此我的做法是:先将整个数据进行字符串替换,将 和 替换为空串;然后交给Jsoup去解析,这样就可以直接一个循环一步到位了。

字符串替换

基于上面的思路,如何一次性替换掉所有的 和 就成了关键。好在 String 类就有替换方法:和,我们直接拿过来用就可以了。

但是我这里就被这两个方法的名字迷惑了,想着是替换全部的 和 嘛,那在合适不过了。于是就这么用了:

结果这么一写出来,AS 就在提示参数有问题:。

这下懵了,然后老老实实看了下 replaceAll 的说明:

Replaces each substring of this string that matches the given regular expression with the given replacement.

replaceAll 实现方式:

意思很明显,第一个参数 regex 是正则表达式,这个方法的作用就是用 replacement 去替换所有满足 regex的内容。而也是正则表达式的关键字符,因此这里没有经过处理直接使用就出现了参数问题。

这里我对正则表达式了解的不多,也就没有深究 replaceAll 方法了,转而看了下 replace 的说明和实现:

这里意思就是说,替换每一个满足条件的字串。而且替换过程是从字符串开始到结束单向的,不会出现倒退;比如说:在里面用替换,结果是,而不是。用也就是说 replace 和 replaceAll 不是字面意思,它俩都是替换所有满足条件的内容

另外,这里replace的实现方式也非常严谨,对的情况也进行了处理,处理方式是在原字串首尾和其所有字符之间都添加 replacement。举个栗子:

结果是:

小结

1、replace 和 replaceAll 都是替换所有满足条件的内容,只不过replace的匹配条件是普通的字串,而replaceAll的匹配条件是正则表达式。

2、当要被处理的字符串比较庞大时,replaceAll 的效率总是比 replace 的快一些;当字符串量不大时,二者效率不相上下。

3、当字符串无法确定是否具有转义字符时,而且也不需要转义时,建议使用 replace 函数;否则,使用 replaceAll 函数。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180510G0G3A900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券