我寫了一個字符串「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前綴和後綴字符串(部分之前和子後搜索字符串的位置去除,被刪除)。
該解決方案僅刪除一次字符串。如果重複,並且你想刪除所有的實例,你可以快速修改它來做到這一點,在後綴(遞歸)上做同樣的事情。
如果下面的答案滿足您的要求,考慮接受它,否則改善您的問題,以指出什麼是錯的和/或丟失 –