java.lang.String的replace()和replaceAll()方法有什么区别? 除了以后使用正则表达式?对于简单的替换,比如替换。用/, 有什么区别吗?


当前回答

问:java.lang.String方法replace()和replaceAll()有什么区别,除了后者使用regex。

A:只是正则表达式。它们都替换了所有:)

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html

PS:

还有一个replaceFirst()(接受一个正则表达式)

其他回答

在Java 9中,对替换方法进行了一些优化。

在Java 8中,它使用正则表达式。

public String replace(CharSequence target, CharSequence replacement) {
    return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
            this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}

Java 9及以上版本。

和Stringlatin实现。

它们表现得更好。

https://medium.com/madhash/composite-pattern-in-a-nutshell-ad1bf78479cc?source=post_internal_links---------2------------------

replace()方法被重载以同时接受基本字符和CharSequence作为参数。

现在,就性能而言,replace()方法比replaceAll()方法快一些,因为后者首先编译正则表达式模式,然后在最终替换之前进行匹配,而前者只是匹配提供的参数并进行替换。

因为我们知道正则表达式模式匹配有点复杂,因此更慢,所以建议尽可能使用replace()而不是replaceAll()。

例如,对于你提到的简单替换,最好使用:

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用法的解释差异。

问:java.lang.String方法replace()和replaceAll()有什么区别,除了后者使用regex。

A:只是正则表达式。它们都替换了所有:)

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html

PS:

还有一个replaceFirst()(接受一个正则表达式)

replace适用于char数据类型,而replaceAll适用于String数据类型,两者都将第一个实参替换为第二个实参。