寻找一个liner来删除多个子字符串

krugob8w  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(301)

我有一个包含两个子字符串的字符串:

sub_string1 = 123;
sub_string2 = 456;

full_string = "456".concat(sub_string1).concat(sub_string2);

稍后我要删除 sub_string1 以及 sub_string2full_string .
我目前的方法很麻烦:

String Removed1 = full_string.replace(sub_string1, "");
String Removed2 = Removed1.replace(sub_string2, "");

我正在寻找一个一行解决这个问题,有什么建议吗?

63lcw9qa

63lcw9qa1#

您的代码存在这样一个问题:删除第一个子串可能会产生第二个子串的外观,而第二个子串以前不存在,然后在第二步中删除。任何分两步执行删除的方法都会遇到这个问题。
如果您只想删除出现在原始完整字符串中的两个子字符串的外观,那么您必须在一个过程中执行这两个删除操作,而使用基于regex的方法最容易实现这一点。如果子字符串可能包含正则表达式元字符,那么构造这样的正则表达式可能有点棘手,但是可以这样做:

String removed = full_string.replace(
        Pattern.quote(substring1) + "|" + Pattern.quote(substring2), "");

我将它表示为一个跨越两行的语句,但行数只是一个空格的问题。如果源代码行的数量是您真正关心的,那么您可以将原始代码的行连接成一行。
请注意,上面的方法并不一定完美,因为在一个子串的尾部与另一个子串的开头匹配的情况下,它可能会执行您想要的操作,也可能不会执行您想要的操作。

pbwdgjma

pbwdgjma2#

您可以这样组合它们:

String Removed = full_string.replace(sub_string1,"").replace(sub_string2, "");
yrwegjxp

yrwegjxp3#

您可以使用regex删除多次出现的字符串,使用匹配的任何一个标记

String sub_string1 = "123";
String sub_string2 = "456";

String finals = "456df123".replaceAll(sub_string1 +"|"+sub_string2 , "");
//or
//String finals = "456df123".replaceAll("456|123" , "");
System.out.println(finals);

结果:

df

相关问题