str.replaceAll()和str.replace()的区别不可小视
在jdk6.0的api中replaceAll()和replease()的解释分别如下:
replaceAll
public String replaceAll(String regex, String replacement)
- 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。
此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:
Pattern
.compile
(regex).matcher
(str).replaceAll
(repl) -
-
- 参数:
regex
- 用来匹配此字符串的正则表达式- 返回:
- 得到的 String
- 抛出:
PatternSyntaxException
- 如果正则表达式的语法无效- 从以下版本开始:
- 1.4
- 另请参见:
Pattern
replace
public String replace(CharSequence target, CharSequence replacement)
- 使用指定的字面值替换序列替换此字符串匹配字面值目标序列的每个子字符串。该替换从此字符串的开始一直到结束,例如,用 "b" 替换字符串 "aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。
-
-
- 参数:
target
- 要被替换的 char 值序列replacement
- char 值的替换序列- 返回:
- 得到的字符串
- 抛出:
NullPointerException
- 如果target
或replacement
为null
。- 从以下版本开始:
- 1.5
- 注意:
public String replaceAll(String regex, String replacement)
其中的第一个参数为正在表达式,而非字符串!!
而
public String replace(CharSequence target, CharSequence replacement)
这个才是字符串!!示例代码如下:
public class Demo1 { @Test public void test(){ String str = "..abcd"; System.out.println(str.replaceAll("..", "")); System.out.println(str.replace("..", "")); } }
结果为:
abcd
注意:第一行为空,因为在正在表达式当中"."代表任何字符,因此两个".."把所有字符都替换掉了,故输出为空。