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适用于char数据类型,而replaceAll适用于String数据类型,两者都将第一个实参替换为第二个实参。

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(字符串正则表达式,字符串替换)

正则表达式

教程 模式列表

为了添加到已经选择的“最佳答案”(以及其他像Suragch的一样好的答案),String.replace()被限制为替换顺序字符(因此接受CharSequence)。但是,String.replaceAll()不受仅替换顺序字符的约束。只要正则表达式以这种方式构造,就可以替换非顺序字符。

此外(最重要也是最明显的),replace()只能替换文字值;而replaceAll可以替换“like”序列(不一定相同)。

问: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------------------