如何获得新的替换字符串的新值?

时间:2018-12-31 06:49:15

标签: java string

我还是java的新手。有没有办法获取已替换的新字符串?

import java.io.*;
public class Test {

    public static void main(String args[]) {
        String str = new String("wew");
        System.out.println(str.replaceAll("w", "61"));
        System.out.println(str.replaceAll("e", "31"));
    }
}

输出:

61e61
w31w

所需的新输出:

613161

我想获取输出字符串61e61,然后将e替换为31

5 个答案:

答案 0 :(得分:5)

您可以将replaceAll链接为:

System.out.println(str.replaceAll("w", "61").replaceAll("e", "31"));

当前,您将在两个print语句中返回两个不同的字符串。

System.out.println(str.replaceAll("w", "61")); // returns new string '61e61'
System.out.println(str.replaceAll("e", "31")); // returns new string 'w31w'

答案 1 :(得分:4)

您使用错了。类字符串的方法replaceAll返回一个字符串。

您必须再次使用返回值(可以写成一行):

    String str = "wew".replaceAll("w", "61").replaceAll("e", "31");
    System.out.println(str);

输出:613161

答案 2 :(得分:4)

让我们回顾一下为什么您的代码不能提供您期望的结果。

您使用“ wow”创建实例。

String str = new String("wew");

然后将“ wew”中的“ w”替换为“ 61”并打印结果“ 61e61”

System.out.println(str.replaceAll("w", "61")); //61e61

现在,这里的重要部分是str.replaceAll的结果是一个新实例,因此str仍然是“ wow”。

System.out.println(str); // wew

这说明了为什么第二个替换将打印“ w31w”

System.out.println(str.replaceAll("e", "31")); //w31w

原因是String是不可变的,因此当您尝试更改不可变实例的值时,将返回一个新实例。因此,要保留它,您需要将该实例分配给变量。

str = str.replaceAll("w", "61");

现在,结果保存在变量“ str”中

System.out.println(str); // 61e61

现在,关于不可变类的一件好事是方法通常可以链接起来,因为返回值是类本身的一个实例。因此,您可以一次调用多个方法。

str = str.replaceAll("w", "61").replaceAll("e", "31");
System.out.println(str); // 613161

但是,如果要打印中间结果,则需要在两个语句中完成

    str = str.replaceAll("w", "61");
    System.out.println(str); // 61e61
    System.out.println(str = str.replaceAll("e", "31")); // 613161

请注意最后一条语句,可以将赋值和打印语句合并。 首先评估str = ..,然后打印结果。

答案 3 :(得分:2)

String.replaceAll()将返回一个新的String,因此您的代码System.out.println(str.replaceAll("w", "61"));System.out.println(str.replaceAll("e", "31"));需要链接,否则将返回错误的结果,
您可以使用commons-lang3中的StringUtils.replaceEach()

StringUtils.replaceEach("wew", new String[]{"w", "e"}, new String[]{"61", "31"});

答案 4 :(得分:0)

str = str.replaceAll("w", "61") //Output = 61e61
str = str.replaceAll("e", "31") //Output = 613161