![](/img/trans.png)
[英]Why is this Regex not removing all 3 or more occurrences from a String?
[英]practice: removing all string occurrences from another
我正在做一些初學者的編碼練習,我遇到了這個問題:給定兩個字符串,base和remove,返回一個基本字符串的版本,其中刪除了刪除字符串的所有實例。 (不區分大小寫)。
這是我到目前為止所做的,但它根本不起作用。
public String withoutString(String base, String remove) {
for (int i=0; i<base.length()-remove.length(); i++){
if (base.substring(i, i+remove.length()).equals(remove)){
base = base.substring(i, base.indexOf("remove")-1) + base.substring(base.indexOf("remove"), base.length()-remove.length());
}
}
return base;
}
我還沒有處理區分大小寫的部分,以使其對我自己更加明顯。 我也不確定為什么我不能使用base.replaceAll(“remove”,“”); 任何幫助表示贊賞。
編輯*:我犯了一個新手錯誤,替換所有仍然有效。 另外,我怎么能用循環和條件做到這一點? 它會像我以前一樣凌亂嗎?
您可以使用
String result = base.replaceAll(remove,"");
使用引號,你嘗試它實際上是嘗試刪除字符串"remove"
。
要處理不區分大小寫的情況,您可以在前面使用正則表達式標志來忽略大小寫(?i)
,這樣就可以調用
String result = base.replaceAll("(?i)" + remove,"");
這意味着String remove現在是一個正則表達式,因此特殊字符可能會產生不希望的結果。 例如,如果您的刪除字符串是.
,你最終會刪除每個角色。 如果您不希望它作為正則表達式那么使用
String result = Pattern.compile(remove, Pattern.LITERAL).matcher(base).replaceAll("")
其中還可以包含不區分大小寫的標志,因為它們是位掩碼,請參閱Pattern以獲取更多信息
Pattern.LITERAL | Pattern.CASE_INSENSITIVE
編輯
要使用你的循環,只需執行此循環
for (int i=0; i <= base.length()-remove.length(); i++)
{
if (base.substring(i, i+remove.length()).equals(remove))
{
base = base.substring(0, i) + base.substring(i + remove.length() , base.length());
i--;
}
}
indexOf("remove")
意味着,您正在搜索(固定)STRING remove
,而不是名為remove
的String
的值 - 這是最不喜歡的,您想要做什么。 同樣適用於您的replaceAll("remove")
嘗試。
刪除"
所以你使用名為remove
的字符串的VALUE,而不是固定的字符串"remove"
例:
String remove = "test";
System.out.println(remove) // will print: test
System.out.println("remove") // will print: remove
你應該使用(?i)
標志或:
base = Pattern.compile(remove, Pattern.CASE_INSENSITIVE).matcher(base).replaceAll("");
試試這個 :
if(base.indexOf(remove) != -1){
base.replaceAll(remove,"");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.