Java---replace與replaceAll的區別

      網友投稿 1148 2025-04-03

      乍一看,字面上理解好像replace只替換第一個出現的字符(受javaScript的影響),replaceall替換所有的字符,其實大不然,只是替換的用途不一樣。

      這兩者很容易搞混,在這里詳細講述下。

      我們先看下JAVA_API的說明:

      public String replace(char oldChar,char newChar)

      使用指定的字面值替換序列替換此字符串所有匹配字面值目標序列的子字符串。該替換從字符串的開頭朝末尾執行,例如,用 "b" 替換字符串 "aaa" 中的 "aa" 將生成 "ba" 而不是 "ab"。

      返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 而生成的。 如 果 oldChar 在此 String 對象表示的字符序列中沒有出現,則返回對此 String 對象的引用。否則,創建一個新的 String 對象,用來表示與此 String 對象表示的字符序列相等的字符序列,除了每個出現的 oldChar 都被一個 newChar 替換之外。

      public String replaceAll(String regex,String replacement)

      使用給定的 replacement 字符串替換此字符串匹配給定的正則表達式的每個子字符串。此方法調用的 str.replaceAll(regex, repl) 形式產生與以下表達式完全相同的結果:

      Pattern.compile(regex).matcher(str).replaceAll(repl)

      參數:

      regex – 用來匹配此字符串的正則表達式

      返回:得到的 String

      拋出: PatternSyntaxException – 如果正則表達式的語法無效。

      有一點注意:執行了替換操作后,源字符串的內容是沒有發生改變的.

      replace的參數是char和CharSequence,即可以支持字符的替換,也支持字符串的替換(CharSequence即字符串序列的意思,說白了也就是字符串);

      replaceAll的參數是regex,即基于規則表達式的替換,比如:可以通過replaceAll("\d", "*")把一個字符串所有的數字字符都換成星號;

      相同點:都是全部替換,即把源字符串中的某一字符或字符串全部換成指定的字符或字符串;

      不同點:replaceAll支持正則表達式,因此會對參數進行解析(兩個參數均是),如replaceAll("\d", "*"),而replace則不會,replace("\d","*")就是替換"\d"的字符串,而不會解析為正則。

      另外,如果replaceAll()和replaceFirst()所用的參數據不是基于規則表達式的,則與replace()替換字符串的效果是一樣的,即這兩者也支持字符串的操作;

      用正則表達式僅僅是替換全部或替換第一個的話,用replaceAll或replaceFirst即可。

      簡單舉例如下: String src = new String("ab43a2c43d"); System.out.println(src.replace("3","f"));=>ab4f2c4fd. System.out.println(src.replace('3','f'));=>ab4f2c4fd. System.out.println(src.replaceAll("\d","f"));=>abffafcffd. System.out.println(src.replaceAll("a","f"));=>fb43fc23d. System.out.println(src.replaceFirst("\d,"f"));=>abf32c43d System.out.println(src.replaceFirst("4","h"));=>abh32c43d.

      另外還有一個不同點:“\”在java中是一個轉義字符,所以需要用兩個代表一個。例如System.out.println( "\" ) ;只打印出一個"\"。但是“\”也是正則表達式中的轉義字符,需要用兩個代表一個。所以:\\被java轉換成\,\又被正則表達式轉換成\,因此用replaceAll替換“\”為"\",就要用replaceAll("\\","\\\\"),而replace則replace("\","\\")。

      如果只想替換第一次出現的,可以使用replaceFirst(),這個方法也是基于規則表達式的替換,但與replaceAll()不同的是,只替換第一次出現的字符串。

      實際應用:

      public static void main(String[] arg) throws OgnlException {

      String s =”sdf\a\aa”;

      //把s中的反斜杠\ 替換為\

      System.out.println(s);

      System.out.println(s.replaceAll(“\\”, “\\\\”));

      System.out.println(s.replace(“\”, “\\”));

      }

      性能比較:

      如果我們能確定字符串替換,用replace性能略好!如果有大量不確定字符串,replaceAll+正則性能會更好!

      Java---replace與replaceAll的區別

      (網上整理來的~)

      Java 正則表達式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel批量刪除某顏色
      下一篇:wps怎樣設置坐標軸圖解(wps怎么做坐標軸圖)
      相關文章
      亚洲视频2020| 亚洲国语精品自产拍在线观看| 亚洲美女视频网址| 国产A在亚洲线播放| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲人成人无码网www国产| 亚洲av高清在线观看一区二区| xvideos亚洲永久网址| 亚洲国产成人久久笫一页| 国产午夜亚洲精品不卡电影| 激情小说亚洲图片| 伊在人亚洲香蕉精品区麻豆| 亚洲AV之男人的天堂| 亚洲精品一级无码鲁丝片| 亚洲一级特黄大片在线观看| 国产黄色一级毛片亚洲黄片大全| 国产亚洲AV夜间福利香蕉149 | 国产精品亚洲一区二区三区在线观看| 亚洲av无码一区二区三区天堂 | 亚洲av永久中文无码精品综合| 亚洲精品无码av片| 色偷偷尼玛图亚洲综合| 亚洲电影日韩精品 | 亚洲av永久综合在线观看尤物| 亚洲av产在线精品亚洲第一站| 在线观看亚洲AV日韩AV| 亚洲精品国产av成拍色拍| 国产精品亚洲二区在线| 亚洲а∨天堂久久精品| 亚洲中文字幕久久精品无码APP| 久久亚洲AV午夜福利精品一区| 中文字幕亚洲综合精品一区| 亚洲不卡在线观看| 亚洲欧美国产国产一区二区三区| 女bbbbxxxx另类亚洲| 中文字幕精品亚洲无线码一区| 亚洲av无码片在线播放| 亚洲毛片无码专区亚洲乱| 亚洲日韩一区二区三区| 亚洲乱码中文字幕手机在线| 亚洲精品乱码久久久久久中文字幕 |