閱讀文章前,請先做道題(也是因為這道題,讓我寫下該文章): public static void main(String[] args) { String classPath = "java.lang.String"; System.out.println(classPath.replaceAll(".", "/")); } 輸出結果是? 如果你認為是java/lang/String ,那你就錯了。正確的輸出結果是://////////////// 原因:請先看看replace和replaceAll的區(qū)別。 replace和replaceAll的區(qū)別: 1、replace的參數是CharSequence和CharSequence,其中第一個是匹配的字符或字符串,第二個是替換的字符或字符串。即可以支持字符的替換,也支持字符串的替換(CharSequence即字符串序列的意思,相當于字符串) 2、replaceAll的參數是String和String,第一個參數regex,是替換規(guī)則(用正則表達式)。原因在于String類中replaceAll的實現用到Pattern進行正則表達式匹配(關于正則表達式可以baidu或google一下,以后有空再寫篇文章總結下)。 replaceAll的源代碼如下: public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement); } 在正則表達式中.(小圓點)表示匹配除換行符號外的任意字符,所以上面的例子才會出現16個/ 如果想匹配小圓點,可以用轉義字符\ 則代碼應該如下: System.out.println(classPath.replaceAll("\\.", "/")); //其中\(zhòng)\匹配\,之后的\. 匹配.(小圓點) 當然,你也可以用replace()進行處理,如下: System.out.println(classPath.replace(".", "/")); |
|