簡體   English   中英

練習:從另一個中刪除所有字符串

[英]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 ,而不是名為removeString的值 - 這是最不喜歡的,您想要做什么。 同樣適用於您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM