如字符串:http://www.vvcc.abc.com:8080/
以“.”分割為字符串數組時,方法如下:
String domainNam="http://www.vvcc.abc.com:8080/";
String[] splitStr = domainNam.split("\\.");
必須經過轉義后才能分割,單純的以domainNam.split(".");分割時,結構字符串數組長度為0;
以“.”分割為字符串數組時,方法如下:
String domainNam="http://www.vvcc.abc.com:8080/";
String[] splitStr = domainNam.split("\\.");
必須經過轉義后才能分割,單純的以domainNam.split(".");分割時,結構字符串數組長度為0;
-----------------------------------
- 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);
- }
- }
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
- }
- }
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就做不到,因為它不是基於規則表達多的替換。
=================
replace和replaceAll是JAVA中常用的替換字符的方法,它們的區別是: ===========================
1)replace的參數是char和CharSequence,即可以支持字符的替換,也支持字符串的替換(CharSequence即字符串序列的意思,說白了也就是字符串);
2)replaceAll的參數是regex,即基於規則表達式的替換,比如,可以通過replaceAll("\\d", "*")把一個字符串所有的數字字符都換成星號;
相同點是都是全部替換,即把源字符串中的某一字符或字符串全部換成指定的字符或字符串,如果只想替換第一次出現的,可以使用 replaceFirst(),這個方法也是基於規則表達式的替換,但與replaceAll()不同的是,只替換第一次出現的字符串;
另外,如果replaceAll()和replaceFirst()所用的參數據不是基於規則表達式的,則與replace()替換字符串的效果是一樣的,即這兩者也支持字符串的操作;
還有一點注意:執行了替換操作后,源字符串的內容是沒有發生改變的.
舉例如下:
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.
如何將字符串中的"\"替換成"\\":
String msgIn;
String msgOut;
msgOut=msgIn.replaceAll("\\\\","\\\\\\\\");
原因:
'\'在java中是一個轉義字符,所以需要用兩個代表一個。例如System.out.println( "\\" ) ;只打印出一個"\"。但是'\'也是正則表達式中的轉義字符(replaceAll 的參數就是正則表達式),需要用兩個代表一個。所以:\\\\被java轉換成\\,\\又被正則表達式轉換成\。
同樣
CODE: \\\\\\\\
Java: \\\\
Regex: \\
將字符串中的'/'替換成'\'的幾種方式:
msgOut= msgIn.replaceAll("/", "\\\\");
msgOut= msgIn.replace("/", "\\");
msgOut= msgIn.replace('/', '\\');