1、二者的区别
首先,
replace是指替换一个匹配的子字符串,而replaceAll是替换所有匹配的子字符串
这种说法是完全错误的,尽管字面上是这个意思。
其次,查阅API,下面是所有和replace相关的信息。
- String replace(char oldChar, char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.
(用新的子字符取代所有旧子字符,然后返回一个新的字符串结果)- String replace(CharSequence target, CharSequence replacement)
Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence.
(将与该目标字符序列匹配的每个子字符串替换为特定的字符序列。)- String replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given replacement.
(使用正则表达式匹配每个要被替换的子字符串,用新的子字符串代替。)- String replaceFirst(String regex, String replacement)
Replaces the first substring of this string that matches the given regular expression with the given replacement.
(使用正则表达式匹配第一个要被替换的子字符串,用新的子字符串代替。)
第1个函数注意是用字符替换字符。
第2个函数中,CharSequence是一个接口,它的实现类有这些:
CharBuffer, Segment, String, StringBuffer, StringBuilder
那我们可以用StringBuffer替换String吗,答案是可以的,不信自己去测。
String s="aaaabbbcccc";
s=s.replace(new StringBuffer("ab"), "111");
s=s.replace("11", new StringBuilder("qqq"));
char[] carray = new char[3];
carray[0]='a';
carray[1]='q';
carray[2]='v';
s=s.replace(new Segment(carray,0,2),"w");//从0开始的2个字符组成的字符串作为匹配项
System.out.println(s);
2.注意事项
有时候会出现 replace()与replaceAll()失效的问题。其实都是我们自己的问题。
原因有二:
(1)原字符串中确实没有你想要匹配的匹配项,你给的匹配项与你想的匹配项不一致。oldChar/target/regex不对。
比如说我的原字符是:
"\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><txxML xsi:type=\\\"SbbResponse\\\" xmlbh=\\\"\\\" bbh=\\\"null\\\" xmlmc=\\\"\\\" xsi:schemaLocation=\\\"http://www.aaaa.cn/dataspec/TxxMLBw_SBB_6_Response_V1.0.xsd\\\" xmlns=\\\"http://www.aaaa.cn/dataspec/\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"><code>00000</code><message>处理成功</message><je>276.77</je><yxh>10013719000000073014</yxh><rq>2019-02-22</rq></txxML>\""
现在我想把 "\"<?xml
变为 "<
,那应该这么写
s=s.replace("\\\"<", "<");
(2)新字符串在返回值里,忘了赋值了。比如下面的这个就是错的。
s.replace("\\","");
正确的打开方法应该是:
return s.replace("\\","");
或者
s=s.replace("\\","");