public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = "this is just just a text text";
System.out.println(s.replaceAll(" just ", " <b>just</b> "));
}
输出应该是这仅仅是文本文本,但是我得到的仅仅是文本文本。有人可以帮助我理解这一点吗?
提前致谢!
最佳答案
做类似的事情:
System.out.println(s.replaceAll("just", "<b>just</b>"));
如果您只想替换
"just"
而不是任何以"just"
开头的单词,则此命令可能不合适。否则输入如下:
String s = "this is justice just a text text";
将产生:
这只是冰而已
由于
replaceAll()
使用正则表达式,因此可以通过期望" just"
或"just "
来处理空格。通过这样做:
System.out.println(s.replaceAll("\\sjust|just\\s", "<b>just</b>"));
您将获得接近目标的结果,但由于正则表达式考虑了前后的空白并保持替换的一致性,因此您在输出中仍会遇到空白问题(过多或不足),您应保持输入中的空白。
一个更好的解决方案是调用两次
replaceAll()
:System.out.println(s.replaceAll(" just ", " <b>just</b> ").replaceAll(" just ", " <b>just</b> "));
例如,使用此输入:
String s = "this is a just just just adjusted justice test";
第一个
replaceAll()
每两个替换一次链接的“ just”:this is a <b>just</b> just <b>just</b> adjusted justice test
这只是一个刚刚调整的司法考试
在第一个
replaceAll()
返回的String上调用的第二个replaceAll()
替换其余的" just "
:this is a <b>just</b> <b>just</b> <b>just</b> adjusted justice test
这只是一个刚刚调整的司法考试
它给出了准确的结果,但这不是最有效的方法,因为它解析了两倍的String。
一个更有效的解决方案可以使用
Pattern
并定义一个不包含空格的组。这样,替换只能在just
字符串上执行。关于java - Java替换功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44181478/