java ReplaceAll 的兩個參數都必須是正則表達式。
在正則表達式中
\ (一個斜線)是用 \\ 來表示(即:用兩個斜線表示一個斜線)
而在Java語言中 \ (一個斜線)是用 \\ 來表示。(即:也用兩個斜線表示一個斜線)
所以正則表達式為兩個斜線("\\")的寫法,在Java語言中要用4個斜線來表示"\\\\"
(即: 一個"現實中的斜線" 在 正則表達式中用2個斜線來表示,而在Java中2個斜線要用4個斜線來表示)
所以代碼如下:
/*
例如: str = "\\\\"; 實際上是表示2個斜線。
你的目的是將2個"實際"斜線 替換為4個"實際斜線"
需要編寫如下代碼
*/
// str的實際內容是\\ (即兩個斜線)
String str = "\\\\";
//將str中的兩個斜線,轉換為兩個雙斜線(即: 4條斜線)
str = str.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str);
- public static void main(String[] args) {
- String classPath = "java.lang.String";
- System.out.println(classPath.replaceAll(".", "/"));
- }
輸出結果是?
如果你認為是java/lang/String ,那你就錯了。正確的輸出結果是:////////////////
原因:請先看看replace和replaceAll的區別。
replace和replaceAll的區別:
1、replace的參數是CharSequence和CharSequence,其中第一個是匹配的字符或字符串,第二個是替換的字符或字符串。即可以支持字符的替換,也支持字符串的替換(CharSequence即字符串序列的意思,相當於字符串)
2、replaceAll的參數是String和String,第一個參數regex,是替換規則(用正則表達式)。原因在於String類中replaceAll的實現用到Pattern進行正則表達式匹配(關於正則表達式可以baidu或google一下,以后有空再寫篇文章總結下)。
2、replaceAll的參數是String和String,第一個參數regex,是替換規則(用正則表達式)。原因在於String類中replaceAll的實現用到Pattern進行正則表達式匹配(關於正則表達式可以baidu或google一下,以后有空再寫篇文章總結下)。
replaceAll的源代碼如下:
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
在正則表達式中.(小圓點)表示匹配除換行符號外的任意字符,所以上面的例子才會出現16個/
如果想匹配小圓點,可以用轉義字符\ 則代碼應該如下:
System.out.println(classPath.replaceAll("\\.", "/")); //其中\\匹配\,之后的\. 匹配.(小圓點)
當然,你也可以用replace()進行處理,如下:
System.out.println(classPath.replace(".", "/"));