日常技术分享 : 一定要注意replcaceAll方法,有时候会如你所不愿!

举报
穆雄雄 发表于 2022/12/12 21:08:08 2022/12/12
【摘要】 今天,踩过了一个雷,特此整理了一下,以防大家也被中招!事情是这样的,在做一个项目时,需要用到String类的replcaceAll方法,可以这么说,该方法就是替换字符串的;比如这样我们需要将“你是谁?”中的谁替换成“我是谁?”,代码就是这样:“你是谁?”.replaceAll(“你”, “我”);看官方的文档,以及百度,怎么看都很简单。在有些时候,也可以用来删除某个字符串中特定的字符,例如:...

今天,踩过了一个雷,特此整理了一下,以防大家也被中招!

事情是这样的,在做一个项目时,需要用到String类的replcaceAll方法,可以这么说,该方法就是替换字符串的;比如这样我们需要将“你是谁?”中的谁替换成“我是谁?”,代码就是这样:“你是谁?”.replaceAll(“你”, “我”);

看官方的文档,以及百度,怎么看都很简单。

在有些时候,也可以用来删除某个字符串中特定的字符,例如:我们需要将“小白兔,白又白”的“白又白”删除掉,输出“小白兔”,那么代码就是这样:“小白兔,白又白”.replaceAll(",白又白", “”);很简单,就是将你不想要的字符串用空格代替即可。

一切看似没有任何问题,但最后还是出问题了!比如我写了这样的代码:" 是谁? " . r e p l a c e A l l ( " 是谁?".replaceAll(" ", “¥”);根据上面的解释,相信大家也知道这行代码的意思了,即将 替换成¥,但事实却不如你所愿,输出的结果是:“ 替换成¥,但事实却不如你所愿,输出的结果是:“ 是谁?¥”,先不要管为什么是这样的结果,只需要知道不对就行。

问题就出在了replcaceAll身上,replcaceAll方法确实需要两个String类型的字符串,也确实可以实现字符串的替换,但是,需要注意的是,第一个参数应该是正则表达式,符合正则表达式的字符串才会被替换,我们输入的如果是“白又白”,可以进行全面匹配,故正常替换,但是“$”符号就不一样了,它是正则表达式结束的符号,也就是说执行完了relpaceAll方法后,在字符串的结尾地方又加上了我们后面传入的“¥”,所以结果就成了这样的。

解决方法也很简单,将replcaceAll换成replace就可以啦。

所以说这两个方法还是有区别的,这次踩坑了,顺便记录一下,下次长点记性,该用什么就用什么,不要乱用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。