Java字符串的 replace()与replaceAll()

1、二者的区别

首先,

replace是指替换一个匹配的子字符串,而replaceAll是替换所有匹配的子字符串

这种说法是完全错误的,尽管字面上是这个意思。

其次,查阅API,下面是所有和replace相关的信息。

  1. String replace(char oldChar, char newChar)
    Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.
    (用新的子字符取代所有旧子字符,然后返回一个新的字符串结果)
  2. String replace(CharSequence target, CharSequence replacement)
    Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence.
    (将与该目标字符序列匹配的每个子字符串替换为特定的字符序列。)
  3. String replaceAll(String regex, String replacement)
    Replaces each substring of this string that matches the given regular expression with the given replacement.
    (使用正则表达式匹配每个要被替换的子字符串,用新的子字符串代替。)
  4. 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("\\","");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值