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> "));
}
输出应该是只是 只是一个文本文本,但我得到的是只是只是一个文本文本。有人可以帮助我理解这一点。 提前谢谢!
答案 0 :(得分:2)
做类似的事情:
System.out.println(s.replaceAll("just", "<b>just</b>"));
如果您只想替换"just"
而不是以"just"
开头的任何字词,则可能不合适。 否则输入如:
String s = "this is justice just a text text";
将产生:
这是只是 ice 只是文本文本
由于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()
取代了链接&#34;只是&#34;每两个一次:
this is a <b>just</b> just <b>just</b> adjusted justice test
这是只是 只是调整后的司法测试
第一个replaceAll()
返回的字符串上调用的第二个replaceAll()
替换了剩余的" just "
:
this is a <b>just</b> <b>just</b> <b>just</b> adjusted justice test
这是只是 只是 只是调整后的司法测试
它给出了一个准确的结果,但它不是解析两次String的最有效方法。
更有效的解决方案可以使用Pattern
并定义一个不包含空格的组。通过这种方式,可以仅在just
字符串上执行替换。
答案 1 :(得分:1)
您应该使用:
System.out.println(s.replaceAll("just", "<b>just</b>"));
注意模式中缺少空格。
答案 2 :(得分:1)
这是因为第一个\s
消耗了两个空格\sjust\s
,因此字符串中仅剩just\s
因此\sjust\s
将不匹配
s.replaceAll(" just", "<b>just</b>")
会做到这一点
答案 3 :(得分:0)
这是因为你正在just
(注意“just”之前和之后的空白区域),而this is just just a text text
中只有1个这样的实例,你可以更好的做s.replaceAll("just", "<b>just</b>")
,这基本上意味着只使用“只是”和“只是”,没有任何空格。
答案 4 :(得分:0)
我猜它没有找到第二只因为它之间没有一个双重空间,只是因为&#34;只是&#34;因为它只找到一个&#34;只是&#34;使用中间空格一次,不允许再次使用它作为替换函数的匹配。
答案 5 :(得分:0)
这个shoudl工作,如果你仔细观察,你会看到我正在使用白色空间&#34;只是&#34;
System.out.println(s.replaceAll(" just", "<b>just</b>"));
答案 6 :(得分:0)
你有额外的空白区域。代替 System.out.println(s.replaceAll(&#34; just&#34;,&#34; 只是&#34;));你应该使用 System.out.println(s.replaceAll(&#34; just&#34;,&#34; 只是&#34;));
答案 7 :(得分:0)
出于某种原因,没有人指出你应该使用单词边界:
System.out.println(s.replaceAll("\\bjust\\b", "<b>just</b>"));
通过使用单词边界,您不必依赖空格,也不需要多次replaceAll调用的复杂性。