我还是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
答案 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