java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法
展開全部
JAVA中string.replace()和string.replaceAll()的區別及用法乍一看,字面上理解好像replace只替換第一個出現的字符(受javascript的影響),32313133353236313431303231363533e59b9ee7ad9431333361313836replaceall替換所有的字符,其實大不然,只是替換的用途不一樣。
public String replace(char oldChar,char newChar)
返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 而生成的。 如 果 oldChar 在此 String 對象表示的字符序列中沒有出現,則返回對此 String 對象的引用。否則,創建一個新的 String 對象,用來表示與此 String 對象表示的字符序列相等的字符序列,除了每個出現的 oldChar 都被一個 newChar 替換之外。
public String replaceAll(String regex,String replacement)使用給定的 replacement 字符串替換此字符串匹配給定的正則表達式的每個子字符串。此方法調用的 str.replaceAll(regex, repl) 形式產生與以下表達式完全相同的結果:
Pattern.compile(regex).matcher(str).replaceAll(repl)
參數:
regex - 用來匹配此字符串的正則表達式
返回:得到的 String
拋出: PatternSyntaxException - 如果正則表達式的語法無效。
如果我有以下的字符串:String?x=?"[kllkklk\\kk\\kllkk]";
要將里面的“kk”替換為++,可以使用兩種方法得到相同的結果replace(CharSequencetarget,?CharSequencereplacement)??——x.replace("kk",?"++")
replaceAll(Stringregex,?Stringreplacement)???????——x.replaceAll("kk",?"++")
可見兩個函數在處理上述字符串的時候沒有什么區別,
下面將字符串中的“\\”替換為“++”System.out.println(x.replace("\\","++"));???//沒有問題
System.out.println(x.replaceAll("\\","++"));??//報錯java.util.regex.PatternSyntaxException
可見,當使用轉義字符進行替換的時候,是有區別的。
replaceAll的參數就是regex,是正則表達式。首先會轉義,所以報錯。
如果使用System.out.println(x.replaceAll("\\\\","++"));即可完成。
那么在使用普通的字符串替換時,選用哪一個函數呢?String?x=?"[kllkklk\\kk\\kllkk]";
String?tmp;
//System.out.println(x.replace("[",?"#").replace("]","#"));
System.out.println(new?Date().getTime());
for(int?i?=0;i<1000000;i++)
tmp=x.replace("kk",?"--");
System.out.println(new?Date().getTime());
for(int?i?=0;i<1000000;i++)
tmp=x.replaceAll("kk",?"++");
System.out.println(new?Date().getTime());
測試結果:
1312424571937
1312424574531
1312424576671
根據測試replaceAll函數要更快一些。看源碼發現,replace函數里面仍使用replaceAll函數。
總體原則:
當字符串無法確定是否具有轉義字符時,而且也不需要轉義時,建議使用replace函數
否則,使用replaceAll函數
總結
以上是生活随笔為你收集整理的java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ID生成策略(一)
- 下一篇: [转]字符串匹配那些事