2017-01-21 42 views

回答

1

假设你使用的Java 8,你能做到这一点使用Stream API,通过使用文字“2017 Girl”作为分隔符的图案,并通过使用Collectors.joining()作为收藏家建立一个新的String没有提供模式的任何occurence:

String result = Pattern.compile("2017 Girl", Pattern.LITERAL) 
    .splitAsStream("I am good 2017 Girl ") 
    .collect(Collectors.joining()); 
+1

好主意;但不完全是我建议初学者的东西;-) – GhostCat

+0

@GhostCat我同意,但我意识到提供的东西听起来像“*更合适*”基于'indexOf'和'substring'(就像你建议的)终于更容易出错,所以我最终决定提供这个简洁明了的答案。 –

1

你可以这样做:

String initialInput = "I am a good 2017 girl"; 
String searchFor = "2017 girl"; 
int indexOfSearch = intialInput.indexOf(searchFor); 

String reworkedInput = initialInput.substring(0, indexOfSearch); 

更啰嗦的流解决方案,但也更基础。

备注:以上是为了让你走的灵感。 “真实”的代码应该例如检查计算出的索引大于0;以确保子串调用不会失败。您还想阅读substring()的javadoc以了解其功能并将返回。

1

可以使用方法:

public static String remove(String base, String toRemove) { 
    if (base == null) return null; 
    if (toRemove == null) return base; 

    int start = base.indexOf(toRemove); 

    if (start < 0) return base; 

    String suffix = base.substring(start + toRemove.length()); 

    if (start > 0) 
     return base.substring(0, start - 1) + suffix; 
    else 
     return suffix; 
} 

基本上,你再CONCAT前缀和后缀字符串(部分之前和子后搜索字符串的位置去除,被删除)。

该解决方案仅删除一次字符串。如果重复,并且你想删除所有的实例,你可以快速修改它来做到这一点,在后缀(递归)上做同样的事情。

相关问题