2017-01-21 55 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前綴和後綴字符串(部分之前和子後搜索字符串的位置去除,被刪除)。

該解決方案僅刪除一次字符串。如果重複,並且你想刪除所有的實例,你可以快速修改它來做到這一點,在後綴(遞歸)上做同樣的事情。

相關問題