我写了一个字符串“I am good 2017 Girl
”。我需要删除“2017 Girl
”而不使用replace
方法。如何使用Java中的特定字符串从字符串中删除字符串?
输出:
I am good
我写了一个字符串“I am good 2017 Girl
”。我需要删除“2017 Girl
”而不使用replace
方法。如何使用Java中的特定字符串从字符串中删除字符串?
输出:
I am good
假设你使用的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());
好主意;但不完全是我建议初学者的东西;-) – GhostCat
@GhostCat我同意,但我意识到提供的东西听起来像“*更合适*”基于'indexOf'和'substring'(就像你建议的)终于更容易出错,所以我最终决定提供这个简洁明了的答案。 –
你可以这样做:
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以了解其功能并将返回。
可以使用子方法:
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前缀和后缀字符串(部分之前和子后搜索字符串的位置去除,被删除)。
该解决方案仅删除一次字符串。如果重复,并且你想删除所有的实例,你可以快速修改它来做到这一点,在后缀(递归)上做同样的事情。
如果下面的答案满足您的要求,考虑接受它,否则改善您的问题,以指出什么是错的和/或丢失 –