最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

 更新時間:2016年09月05日 11:22:00   作者:楊元  
相信會java的同學估計都用過replace、replaceAll、replaceFirst這三個函數(shù),可是,我們真的懂他們嗎?下面通過這篇文章大家再來好好學習學習下這幾個函數(shù)。

首先概述一下他們?nèi)齻€的用法:

· replace(CharSequence target, CharSequence replacement) ,用replacement替換所有的target,兩個參數(shù)都是字符串。

· replaceAll(String regex, String replacement) ,用replacement替換所有的regex匹配項,regex很明顯是個正則表達式,replacement是字符串。

· replaceFirst(String regex, String replacement) ,基本和replaceAll相同,區(qū)別是只替換第一個匹配項。

接下來有個簡單的需求,就是把源字符串中的a替換成\a,代碼如下:

System.out.println("abac".replace("a", "\\a")); //\ab\ac
System.out.println("abac".replaceAll("a", "\\a")); //abac
System.out.println("abac".replaceFirst("a", "\\a")); //abac

結(jié)果讓人大吃一驚,用了這么多年的替換,竟然有點蒙了。

源字符串是"abac",然后我們找到"a",把它替換成\a,由于\是java轉(zhuǎn)義字符,所以想表達\a必須寫成"\\a",第一個反斜線將第二個反斜線轉(zhuǎn)義成普通字符串。

三個替換表達式,只有第一個replace函數(shù)的結(jié)果是正確的,問題出在哪呢?

replaceAll和replaceFirst要求第一個參數(shù)是正則表達式,"a"既能理解成字符串a(chǎn),也可以理解成正則表達式a,所以第一個參數(shù)沒問題。

問題就出在第二個參數(shù)上,如果讀者仔細閱讀replaceAll函數(shù)的注釋,會發(fā)現(xiàn)有如下說明:

Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string; see Matcher.replaceAll. Use java.util.regex.Matcher.quoteReplacement to suppress the special meaning of these characters, if desired.

由于replaceAll和replaceFirst的第一個參數(shù)是正則,所以我們可以在第二個參數(shù)中做些小花樣,比如有這樣一個需求:把源字符串中的a替換成a后邊緊鄰的字符,代碼如下:

System.out.println("abac".replaceAll("a(\\w)", "$1$1")); //bbcc
System.out.println("abac".replaceFirst("a(\\w)", "$1$1")); //bbac

正則的含義假設讀者可以讀懂,可以看出,在第二個參數(shù)中,可以用$符號獲取分組的內(nèi)容,本例中用$1取到了第一個分組的內(nèi)容,即a后邊緊鄰的字符。

因此,$符號在第二個參數(shù)中是有特殊含義的,亂寫會報錯:

System.out.println("abac".replaceAll("a(\\w)", "$")); //Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1

那假如我就想替換成$呢?這就需要轉(zhuǎn)義字符:

System.out.println("abac".replaceAll("a", "\\$")); //$b$c

到這,讀者可能會恍然大悟,原來反斜線在第二個參數(shù)中也有特殊含義(轉(zhuǎn)義),所以如果我們想表達反斜線,就必須再轉(zhuǎn)義一次:

System.out.println("abac".replaceAll("a", "\\\\a")); //\ab\ac
System.out.println("abac".replaceFirst("a", "\\\\a")); //\abac

簡單理解一下,"\\\\a"中前邊的反斜線分別轉(zhuǎn)義后邊的反斜線,讓后邊的反斜線就是普通字符串,這樣在java內(nèi)存中看到的字符串就是"\\a",然后replaceAll函數(shù)在處理時,再用前邊的反斜線轉(zhuǎn)義后邊的反斜線,來表達后邊的反斜線就是普通字符串,不是用來轉(zhuǎn)義$的,最終內(nèi)存中的字符串就是"\a",這樣才可以成功將a替換成\a。

總結(jié)

轉(zhuǎn)義的問題確實糾結(jié),通過本文,筆者希望讀者以后使用這些函數(shù)時,能夠保持清醒,能夠意識到參數(shù)中的特殊字符,避免寫出定時炸彈。以上就是這篇文章的全部內(nèi)容,希望對大家的學習和工作能有所幫助,如果有疑問可以留言交流。

相關文章

  • java獲取IP和IP的歸屬地的方法實踐

    java獲取IP和IP的歸屬地的方法實踐

    在Java中獲取IP地址通常指的是獲取本地機器的IP地址或者通過某種方式獲取的遠程IP地址,本文就來詳細的介紹一下,感興趣的可以了解一下
    2024-05-05
  • MybatisPlus使用排序查詢時將null值放到最后

    MybatisPlus使用排序查詢時將null值放到最后

    按照更新時間排序,但是更新時間可能為null,因此將null的數(shù)據(jù)放到最后,本文主要介紹了MybatisPlus使用排序查詢時將null值放到最后,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • java 如何讀取遠程主機文件

    java 如何讀取遠程主機文件

    這篇文章主要介紹了java 如何讀取遠程主機文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java多線程編程基石ThreadPoolExecutor示例詳解

    Java多線程編程基石ThreadPoolExecutor示例詳解

    這篇文章主要為大家介紹了Java多線程編程基石ThreadPoolExecutor示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java中實現(xiàn)二叉樹的遍歷與重構(gòu)

    Java中實現(xiàn)二叉樹的遍歷與重構(gòu)

    這篇文章主要介紹了Java中實現(xiàn)二叉樹的遍歷與重構(gòu),樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個有限結(jié)點組成一個具有層次關系的集合,把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的,需要的朋友可以參考下
    2023-10-10
  • 解決Spring Data Jpa 實體類自動創(chuàng)建數(shù)據(jù)庫表失敗問題

    解決Spring Data Jpa 實體類自動創(chuàng)建數(shù)據(jù)庫表失敗問題

    這篇文章主要介紹了解決Spring Data Jpa 實體類自動創(chuàng)建數(shù)據(jù)庫表失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA下SpringBoot指定配置文件啟動項目的全過程

    IDEA下SpringBoot指定配置文件啟動項目的全過程

    我們在使用springboot項目開發(fā)的時候,每次切換環(huán)境跑項目的時候,都得修改配置文件的數(shù)據(jù)庫地址,這樣來回修改感覺很麻煩,這篇文章主要給大家介紹了關于IDEA下SpringBoot指定配置文件啟動項目的相關資料,需要的朋友可以參考下
    2023-06-06
  • 詳解Java中常見語法糖的使用

    詳解Java中常見語法糖的使用

    語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家 Peter.J.Landin 發(fā)明的一個術語,指在計算機語言中添加的某種語法,本文主要為大家分享了12個java中常見的語法糖,感興趣的小伙伴可以了解下
    2023-11-11
  • 深入了解集合操作工具Guava?Collect

    深入了解集合操作工具Guava?Collect

    Guava?Collect是Guava工具包中的一個子模塊,主要對jdk中的集合操作添加了一些簡易的API,同時也是對Collections工具類的擴展。本文將結(jié)合實例詳細說說它的使用,需要的可以參考一下
    2022-10-10
  • Maven 生成打包可執(zhí)行jar包的方法步驟

    Maven 生成打包可執(zhí)行jar包的方法步驟

    這篇文章主要介紹了Maven 生成打包可執(zhí)行jar包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論

清涧县| 新余市| 曲靖市| 溧水县| 浠水县| 广东省| 巴东县| 浪卡子县| 尉犁县| 延津县| 郸城县| 抚松县| 朝阳市| 泗洪县| 靖边县| 香河县| 连平县| 乐安县| 离岛区| 富锦市| 株洲市| 射洪县| 从江县| 玉龙| 江源县| 罗源县| 富顺县| 比如县| 永清县| 泾源县| 喀喇| 高邑县| 鹤岗市| 德安县| 大厂| 武邑县| 抚宁县| 河间市| 务川| 博湖县| 都昌县|