String.replaceALL用法。

來源:互聯網
上載者:User
文章目錄
  • Regex,關於String.replaceALL(..)

public class TryDotRegEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "111.3.22.11";
str=str.replaceAll("(^|//.)(//d)(//.|$)","$100$2$3");
str=str.replaceAll("(^|//.)(//d{2})(//.|$)","$10$2$3");
str=str.replaceAll("(^|//.)(//d{2})(//.|$)","$10$2$3");
str=str.replaceAll("(^|//.)(//d{1})(//.|$)","$100$2$3");
        
System.out.println(str);
}

}

列印結果:111,003,022,011;

Regex,關於String.replaceALL(..)

 

 

Regex,關於String.replaceALL(..) 
2005-3-25 15:03:55 
regex:

class t1 {
       public static void main(String a[]) {
         String s = 'E://jbx//x9//io9';
         String ss;
//把路徑s中的'/'換為'//',為何還要整8個'/'?我以為4個就行了。
         ss = s.replaceAll('////', '////////         System.out.println('s= ' + s);
         System.out.println('ss=' + ss);
//output:  
//s= E:/jbx/x9/io9
//ss=E://jbx//x9//io9
       }
}

這 裡的關鍵是String.replaceAll()是用regular expression 來作為參數的。但是java本身的字串對於轉義符/也有類似的處理。首先,java會把“////”解釋成一個字串(其中包含兩個char)——“/ /”這個就是你在JDK的文檔裡看到的。 
接下來,由於replaceAll是以Regex作為參數,所以“//”被解釋成一個regex。對於一個regex來說這就代表著一個字元,就是“/”。對後面的那個8個/來說,最終會被解釋成“//”。

換言之,假設String.replaceAll()是以一般字元串,而不是regex作為參數,那麼這樣寫代碼: String target = source.replaceAll('//', '////'); 就可以了。

===============================
在replaceAll(String,String)方法中需要特殊處理英文狀態的括弧,在網上找了一下,可以使用下面的寫法將英文括弧替換成其他字元(比如中文全形括弧):str1.replaceAll("//(","(");

========================

Java String replaceAll and regex在java中要將一個字串的中$符號去除。我是這樣寫的:
String tmp = "-$125402.00";
tmp.replaceAll("$","");
可是執行去來的結果並沒有把$去除。後來找資料才發現要這樣寫
tmp.replaceAll("//$","")才可以。String replaceAll(String regex, String replacement)中的兩個參數都是regex。尤其是當第二個參數replacement是使用者輸入或指定的字串時,如果其中包含regex特 殊字元(主要是/和$)而不加註意,就容易導致問題引發異常。這種情況下如果只是簡單的字串替換而無需regex引擎參與的話,就不要用 replaceAll好了。JDK1.5中加入了String replace(CharSequence target, CharSequence replacement),可以用它。JDK1.4或以下,自己搞一個好了,如oldReplace:http://www.javapractices.com/Topic80.cjp    

我在寫程式的時候,需要將"/"字元寫入一個文字檔,開始以為這不是個什麼問題,轉換一下就好了嘛,代碼如下:

targetPath = targetPath.replaceAll("//", "////");
fileOperate.createFile(fileName, targetPath);

 

原以為沒有問題,這樣就可以先在讀入的字串中把"/"轉換為"//",然後在寫入文字檔時就會寫成"/",沒想到,報如下錯誤:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
/

回來查了資料才發現,java的replaceAll函數,使用的是Regex作為轉換依據,而"/"在Regex中也是特殊字元,最後,寫成下面的代碼才達到了我預想的目的:

targetPath = targetPath.replaceAll("////", "////////");
fileOperate.createFile(fileName, targetPath);

 

=====================================

replace和replaceAll方法的區別:

主要就是後者是基於規則表達多的替換,而前者是一般的基於字元或字元序列本身的替換。

比如,可以通過replaceAll("//d", "*")把一個字串所有的數字字元都換成星號,replace就做不到,因為它不是基於規則表達多的替換。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.