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

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

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

Java编程中的坑——字符串系列(一)_第1张图片

运行结果:

Java编程中的坑——字符串系列(一)_第2张图片

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

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

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)运算。



你可能感兴趣的:(Java)