如何在字符串的多个部分具有相同字符的情况下替换它们的多个部分?

时间:2019-07-17 10:53:32

标签: java string

我希望更改字符串的几个部分,其中指定部分具有相似的字符;例如:

工作者->工作

工作->工作

使用下面的代码会抛出很多错误:

String txt = "work like a real worker";
String txt2 = txt.replace("worker", "working").replace("work", "worked");

上面的代码输出“工作得像真正的工作”,而我需要“工作得像真正的工作”。

4 个答案:

答案 0 :(得分:2)

如果使用replaceAll而不是replace,则可以使用正则表达式。正则表达式将允许您使用\b来表示word boundaries。这样,您将只替换整个单词,而不是像现在一样替换单词的一部分。

String txt2 = txt.replaceAll("\\bworker\\b", "working").replaceAll("\\bwork\\b", "worked");

答案 1 :(得分:1)

如果要替换整个单词,请查看Michael's answer。如果您想替换掉一些可能包含在其他单词中的单词,而不用再次替换之前替换的目标单词,则可以尝试添加一个中间步骤,如下所示:

String txt = "work like a real worker in the workplace";
String txt2 = txt.replace("worker", "{$1}").replace("work", "{$2}");
String result = txt2.replace("{$1}", "working").replace("{$2}", "worked");

打印

  

像在工作场所中的真实工作一样工作

答案 2 :(得分:0)

问题是,它首先用“正在工作”代替“工人”,这是正确的, 但之后,它将“工作”中的“工作”替换为“已工作”,从而导致“工作”。

如您所见,“工作”替换器也替换了第二个工作,它不应该替换,因为它并不独立。

为避免这种情况,只需在作品后面留一个空格。有了这个空间,它只会代替一个单独站立的作品,而背后没有任何东西(因为有一个空格将它与下一个单词分隔开)。

它还将替换空间,因此请确保在工件后面也留一个空间。

它应该像这样:

String txt = "work like a real worker";
String txt2 = txt.replace("worker", "working").replace("work ", "worked ");

答案 3 :(得分:-1)

使用正则表达式

String txt = "work like a real worker";
String txt2 =  txt.replaceAll("\\worker\\b", "working").replaceAll("\\work\\b", "worked");
相关问题