繁体   English   中英

寻找单线删除多个子字符串

[英]Looking for one-liner to remove multiple sub-string

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

sub_string1 = 123;
sub_string2 = 456;

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

后来我想删除sub_string1sub_string2full_string

我目前的方法很麻烦:

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

我正在寻找一种可以解决这个问题的班轮,有什么建议吗?

您可以使用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

您可以像这样组合它们:

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

您的代码存在以下问题:删除第一个子字符串可能会创建第二个字符串的外观,而第二个外观以前并不存在,然后在第二步中将其删除。 任何在两个步骤中执行删除操作的方法都会遇到此问题。

如果只想删除原始完整字符串中出现的两个子字符串中的那些外观,则必须一次执行两次删除操作,而这最容易通过基于正则表达式的方法来完成。 如果子字符串可能包含正则表达式元字符,则构造这样的正则表达式可能会有些棘手,但是可以这样做:

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

我将其表示为跨越两行的单个语句 ,但是行数仅是空格的问题。 如果源代码行的数量确实是您所关心的,那么您可以将原始代码的行连接成一个。

请注意,上面的内容并不一定是完美的,因为如果一个子字符串的尾部与另一个子字符串的开头相匹配,它可能会或可能不会满足您的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM