java.lang.String的replace()和replaceAll()方法有什么区别? 除了以后使用正则表达式?对于简单的替换,比如替换。用/, 有什么区别吗?
当前回答
replace()和replaceAll()都会替换String中出现的所有内容。
例子
我总是发现例子有助于理解差异。
替换()
如果你只是想用另一个字符替换一些字符,或者用另一个字符串替换一些字符串(实际上是CharSequence),请使用replace()。
示例1
将所有出现的字符x替换为o。
String myString = "__x___x___x_x____xx_";
char oldChar = 'x';
char newChar = 'o';
String newString = myString.replace(oldChar, newChar);
// __o___o___o_o____oo_
示例2
把所有出现的鱼串换成羊。
String myString = "one fish, two fish, three fish";
String target = "fish";
String replacement = "sheep";
String newString = myString.replace(target, replacement);
// one sheep, two sheep, three sheep
replaceAll ()
如果您想使用正则表达式模式,请使用replaceAll()。
示例3
用x替换任何数字。
String myString = "__1_6____3__6_345____0";
String regex = "\\d";
String replacement = "x";
String newString = myString.replaceAll(regex, replacement);
// __x_x____x__x_xxx____x
示例4
删除所有空白。
String myString = " Horse Cow\n\n \r Camel \t\t Sheep \n Goat ";
String regex = "\\s";
String replacement = "";
String newString = myString.replaceAll(regex, replacement);
// HorseCowCamelSheepGoat
另请参阅
文档
replace(char oldChar, char newChar) 替换(CharSequence目标,CharSequence替换) replaceAll(字符串正则表达式,字符串替换) replaceFirst(字符串正则表达式,字符串替换)
正则表达式
教程 模式列表
其他回答
正如在wickeD的回答中提到的,使用replaceAll替换字符串在replace和replaceAll之间的处理方式是不同的。我期望[3]和[4]具有相同的值,但它们不同。
public static void main(String[] args) {
String[] a = new String[5];
a[0] = "\\";
a[1] = "X";
a[2] = a[0] + a[1];
a[3] = a[1].replaceAll("X", a[0] + "X");
a[4] = a[1].replace("X", a[0] + "X");
for (String s : a) {
System.out.println(s + "\t" + s.length());
}
}
它的输出是:
\ 1
X 1
\X 2
X 1
\X 2
这与perl不同,在perl中替换不需要额外的转义级别:
#!/bin/perl
$esc = "\\";
$s = "X";
$s =~ s/X/${esc}X/;
print "$s " . length($s) . "\n";
的打印 \ X 2
这可能非常麻烦,因为当尝试使用java.sql.DatabaseMetaData.getSearchStringEscape()与replaceAll()一起返回的值时。
String replace(char oldChar, char newChar)
返回一个新字符串,结果是将该字符串中所有出现的oldChar替换为newChar。
String replaceAll(String regex, String replacement
用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串。
. lang。String, replace方法要么取一对char's,要么取一对CharSequence's (String是其中的一个子类,所以它很乐意取一对String's)。replace方法将替换所有出现的char或CharSequence。另一方面,replaceFirst和replaceAll的第一个String参数是正则表达式(regex)。使用错误的函数可能会导致微妙的错误。
replace()方法不使用正则表达式模式而replaceAll()方法使用正则表达式模式。因此replace()比replaceAll()执行得更快。
replace()和replaceAll()都会替换String中出现的所有内容。
例子
我总是发现例子有助于理解差异。
替换()
如果你只是想用另一个字符替换一些字符,或者用另一个字符串替换一些字符串(实际上是CharSequence),请使用replace()。
示例1
将所有出现的字符x替换为o。
String myString = "__x___x___x_x____xx_";
char oldChar = 'x';
char newChar = 'o';
String newString = myString.replace(oldChar, newChar);
// __o___o___o_o____oo_
示例2
把所有出现的鱼串换成羊。
String myString = "one fish, two fish, three fish";
String target = "fish";
String replacement = "sheep";
String newString = myString.replace(target, replacement);
// one sheep, two sheep, three sheep
replaceAll ()
如果您想使用正则表达式模式,请使用replaceAll()。
示例3
用x替换任何数字。
String myString = "__1_6____3__6_345____0";
String regex = "\\d";
String replacement = "x";
String newString = myString.replaceAll(regex, replacement);
// __x_x____x__x_xxx____x
示例4
删除所有空白。
String myString = " Horse Cow\n\n \r Camel \t\t Sheep \n Goat ";
String regex = "\\s";
String replacement = "";
String newString = myString.replaceAll(regex, replacement);
// HorseCowCamelSheepGoat
另请参阅
文档
replace(char oldChar, char newChar) 替换(CharSequence目标,CharSequence替换) replaceAll(字符串正则表达式,字符串替换) replaceFirst(字符串正则表达式,字符串替换)
正则表达式
教程 模式列表
推荐文章
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Intellij IDEA Java类在保存时不能自动编译
- 何时使用Mockito.verify()?
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- com.jcraft.jsch.JSchException: UnknownHostKey
- Java中的操作符重载
- 如何加速gwt编译器?
- 如何删除表中特定列的第一个字符?