1. 程式人生 > >Java程式設計中的坑——字串系列(一)

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