java.lang.String的replace()和replaceAll()方法有什么区别? 除了以后使用正则表达式?对于简单的替换,比如替换。用/, 有什么区别吗?
当前回答
用一个例子来说明下面的代码是如何工作的:
public static void main(String[] args)
{
String s = "My\\s aaab\\s is\\s aaab\\s name";
String s1 = s.replace("\\s", "c");
System.out.println(s1);
String s2 = s.replaceAll("\\s", "c");
System.out.println(s2);
}
输出:
Myc aaabc isc aaabc name
My\scaaab\scis\scaaab\scname
解释
s.replace将“\\s”字符序列替换为c。因此,在第一行输出。 s.s replaceall认为\\s是一个正则表达式(相当于空格),并将空格替换为c。字符串s中的\\s会被第一次遇到的\转义并变成\s。
Intellij Idea足够智能,可以通知您的使用情况。如果你仔细看看下图,你会发现Intellij对replace和replaceAll用法的解释差异。
其他回答
replace()和replaceAll()都接受两个参数,并用第二个子字符串(第二个参数)替换字符串中出现的所有第一个子字符串(第一个参数)。 replace()接受一对char或charsequence, replaceAll()接受一对regex。 replace()并不比replaceAll()工作得快,因为两者在实现中使用相同的代码 Pattern.compile(正则表达式).matcher(这).replaceAll(替代);
现在的问题是什么时候使用replace,什么时候使用replaceAll()。 当你想用另一个子字符串替换一个子字符串,而不管它在字符串中的出现位置时,使用replace()。但如果你有一些特殊的偏好或条件,比如只替换字符串开头或结尾的子字符串,请使用replaceAll()。下面是一些例子来证明我的观点:
String str = new String("==qwerty==").replaceAll("^==", "?"); \\str: "?qwerty=="
String str = new String("==qwerty==").replaceAll("==$", "?"); \\str: "==qwerty?"
String str = new String("===qwerty==").replaceAll("(=)+", "?"); \\str: "?qwerty?"
. lang。String, replace方法要么取一对char's,要么取一对CharSequence's (String是其中的一个子类,所以它很乐意取一对String's)。replace方法将替换所有出现的char或CharSequence。另一方面,replaceFirst和replaceAll的第一个String参数是正则表达式(regex)。使用错误的函数可能会导致微妙的错误。
replace()方法不使用正则表达式模式而replaceAll()方法使用正则表达式模式。因此replace()比replaceAll()执行得更快。
问:java.lang.String方法replace()和replaceAll()有什么区别,除了后者使用regex。
A:只是正则表达式。它们都替换了所有:)
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html
PS:
还有一个replaceFirst()(接受一个正则表达式)
为了添加到已经选择的“最佳答案”(以及其他像Suragch的一样好的答案),String.replace()被限制为替换顺序字符(因此接受CharSequence)。但是,String.replaceAll()不受仅替换顺序字符的约束。只要正则表达式以这种方式构造,就可以替换非顺序字符。
此外(最重要也是最明显的),replace()只能替换文字值;而replaceAll可以替换“like”序列(不一定相同)。
推荐文章
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- 将整数转换为字符串,以逗号表示千
- 将JavaScript字符串中的多个空格替换为单个空格
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- printf()和puts()在C语言中的区别是什么?
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?