java$字符串替换_Java8字符串替换⽅法梳理
我们在Java开发中,经常会应⽤到Java String中字符串替换的功能,但是,Java中字符串的替换,有多个API,⽽且和其他语⾔中的⽤法有所不同,发现之前的理解有偏差,在这⾥进⾏⼀下梳理。
在Java中,主要有四个字符串替换的API,主要有:
// 按字符替换,原来的字符替换为新的字符(会将所有的oldChar都替换为newChar)
String replace(char oldChar, char newChar)
// 按字符序列(⼀般是字符串)替换,会将所有的原来的字符序列替换为新的字符序列
String replace(CharSequence target, CharSequence replacement)
// 按照正则替换,所有正则表达式可以匹配上的,都替换为新的字符串
String replaceAll(String regex, String replacement)
// 按照正则替换,替换第⼀个匹配上的
String replaceFirst(String regex, String replacement)
1. API源码分析
下⾯,我们将针对这四个API进⾏简单介绍,下⾯先贴⼀下这四个API的源码:
/**
* String replace(char oldChar, char newChar)
*/
public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value; /* avoid getfield opcode */
while (++i < len) {
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
// 创建⼀个新的字符数组,内容为当前字符串字符序列的内容
java replace方法char buf[] = new char[len];
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
// 逐字符进⾏匹配,如果该字符是oldChar,则替换为newChar
/
/ 这种字符替换的⽅式⾮常简单,就是逐字符替换,没有什么特殊
while (i < len) {
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(buf, true);
}
}
return this;
}
/
**
* String replace(CharSequence target, CharSequence replacement)
*/
public String replace(CharSequence target, CharSequence replacement) {
// ⾸先以Pattern.LITERAL模式(模式中的元字符和转义字符将按照普通字符解析),匹配所有的能匹配到的⼦字符串// 然后将所有可以匹配到的⼦字符串给替换成希望替换的新的字符串
// 这⾥,Matcher.quoteReplacement() 可以处理替换⽬标中的特殊字符,例如 $ 等,使替换匹配原始格式
// 当然,从形参名上也可以看出来⼀点⼉信息,target,就是替换的⽬标,机械替换
return String(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.String()));
}
/**
* String replaceAll(String regex, String replacement)
*/
public String replaceAll(String regex, String replacement) {
// 以正则匹配的形式,先匹配到所有可以匹配到的⼦字符串
// 然后将所有可匹配到的⼦字符串替换成新字符串的内容
return Patternpile(regex).matcher(this).replaceAll(replacement);
}
/**
* String replaceFirst(String regex, String replacement)
*/
public String replaceFirst(String regex, String replacement) {
// 以正则匹配的形式,先匹配到所有可以匹配到的⼦字符串
// 然后将所有可匹配到的第⼀个⼦字符串替换成新字符串的内容
return Patternpile(regex).matcher(this).replaceFirst(replacement);
}
2. 举例分析
如下⾯的代码:
public classStringReplaceTest {
public static voidmain(String[] args) {
String str = "12\\d12\\d";System.out.place('1','3'));// 32\d32\dSystem.out.place("\\d","34"));// 12341234System.out.placeAll("\\d","34"));// 3434\d3434\dSystem.out.placeFi
rst("\\d","34"));// 342\d12\d}
}
上⾯ \\d 就是 \d,是做转义⽤,⾮常简单,第4⾏,简单字符替换,1替换为3,第5⾏,简单字符串替换,第6⾏,正则替换,所有匹配上的数字都替换为"34",第7⾏,只替换第⼀个匹配上的数字。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论