java替换功能

时间:2017-05-25 13:11:37

标签: java replace

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> "));
}

输出应该是只是 只是一个文本文本,但我得到的是只是只是一个文本文本。有人可以帮助我理解这一点。 提前谢谢!

8 个答案:

答案 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调用的复杂性。