java 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;
正規表示式,關於String.replaceALL(..)
- 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來說這就代表著一個字元,就是“\”。對後面的那個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函式,使用的是正規表示式作為轉換依據,而"\"在正規表示式中也是特殊字元,最後,寫成下面的程式碼才達到了我預想的目的:
targetPath = targetPath.replaceAll("\\\\", "\\\\\\\\");
fileOperate.createFile(fileName, targetPath);
=====================================
replace和replaceAll方法的區別:
主要就是後者是基於規則表達多的替換,而前者是一般的基於字元或字元序列本身的替換。
比如,可以通過replaceAll("\\d", "*")把一個字串所有的數字字元都換成星號,replace就做不到,因為它不是基於規則表達多的替換。
相關文章
- SQL特殊字元處理zzSQL字元
- 特殊字元的處理。。¥$$$字元
- SQL server 特殊字元"u0000"處理SQLServer字元
- 含有特殊字元的資料檔案處理字元
- URL路徑中包含特殊字元%的處理字元
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- java 替換特殊字元Java字元
- XAML中的特殊符號幾空白字元處理符號字元
- MYSQL特殊字元(單引號,行尾斜槓)的處理MySql字元
- 處理檔名內含有特殊字元的檔案 (轉)字元
- bc搭建資料夾顯示特殊html字元處理方法HTML字元
- 批處理特殊符號 萬用字元與轉義符符號字元
- PHP對錶單提交特殊字元的過濾和處理PHP字元
- 欄位處理rtrim去掉結尾的特殊字元和空格字元
- swift中webview的URL帶中文或者特殊字元的處理SwiftWebView字元
- JAVA中...的特殊用法。Java
- Linux 下如何處理包含空格和特殊字元的檔名Linux字元
- Java程式異常處理的特殊情況Java
- Java語言中字元的處理 (轉)Java字元
- 特殊字元字元
- shell 字元處理字元
- HTML特殊字元HTML字元
- perl 特殊字元字元
- ptyon 特殊處理 url 編碼與解碼,字元編碼轉化 unicode字元Unicode
- Java替換各種特殊字元工具類Java字元
- 字元處理函式字元函式
- tr命令“字元”處理字元
- Bash的特殊字元字元
- 如何去除特殊字元字元
- Oracle 去特殊字元Oracle字元
- html的特殊字元HTML字元
- 【HTML】08特殊字元HTML字元
- Oracle函式-->字元處理Oracle函式字元
- MyBatis 跳脫字元處理MyBatis字元
- iOS NSString 字串的特殊處理iOS字串
- BREW中的特殊語音處理
- Java中replace與replaceAll區別Java
- Java String類的replaceAll方法Java