Java编程中的坑——字符串系列(一)

在实际编程中,经常会用到将字符串中的某个字符串替换成另一个字符串的场景。最常用的替换字符串的方法是replace(),replaceFirest(),replaceAll()这三种方法。你知道这三种方法的具体区别嘛?你知道怎么替换字符串中的特殊字符嘛?

下面先看如下例子,心中预先想好会输出什么结果,然后再看运行结果:


运行结果:

看到以上运行结果是不是感到很神奇?

下面我们就仔细介绍下,为什么会出现这个的结果?

1、  public String replace(CharSequence target, CharSequence replacement)

2、  public String replace(char oldChar, char newChar)

3、  public String replaceAll(String regex, String replacement)

4、  public String replaceFirst(String regex, String replacement)

看到三个方法的参数类型,你是不是好像明白了。

有很多人认为replace是替换单个字符串,replaceAll是替换所有匹配项。其实这只是对replace方法名的曲解。replace只是没有用到正则表达式,但依然会替换掉字符串中所有的匹配项。

replaceAll和replaceFirst这两个方法在替换字符串时使用到了正则表达式。当第一个参数是正则表达式的元字符时,replaceAll方法会按照正则表达式“.”匹配的所有内容都替换掉。replaceFirst使用方法同replaceAll一样,只是replaceFirst只会替换掉第一个匹配项。

有的小伙伴可能又有疑问了,“如果我不想使用正则表达式规则去替换,怎么办呢?”。

其实很简单,那就用replace方法直接替换就可以了。

问题又来了,如果我不想使用replace呢,我任性我傲娇,只想用replaceAll,怎么办呢?

其实也简单,你只需要把字符串转义过来就搞定了。

System.out.println(s.replaceAll("\\.", "#"));

运行结果:

fireline#qtest#cn

在Java字符串的处理中还有split方法也是识别正则表达式的。小伙伴们在使用的时候要多注意,以免踩坑。

以下是会被正则表达式识别的常见字符列表:

元字符

描述

\

将下一个字符标记符、或一个向后引用、或一个八进制转义符。即相当于多种编程语言中都有的转义字符的概念。

^

匹配输入字行首。

$

匹配输入行尾。

*

匹配前面的子表达式任意次。

+

匹配前面的子表达式一次或多次(大于等于1次)。

?

匹配前面的子表达式零次或一次。

{n}

n是一个非负整数。匹配确定的n次。

?

当该字符紧跟在任何一个其他限制符(*,+,?{n}{n,}{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

.

匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。

\d

匹配一个数字字符。等价于[0-9]

\n

匹配一个换行符。

\r

匹配一个回车符。

\s

匹配任何不可见字符,包括空格、制表符、换页符等等。

\t

匹配一个制表符。

( )

( ) 之间的表达式定义为group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 \9 的符号来引用。

|

将两个匹配条件进行逻辑Or)运算。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值