8

私は初心者向けのコーディングの練習をしていて、この問題に遭遇しました。base と remove の 2 つの文字列が与えられた場合、remove 文字列のすべてのインスタンスが削除されたバージョンの base 文字列を返します。(大文字と小文字を区別しません)。

これは私がこれまでに持っているものですが、まったく機能していません。

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",""); を使用できない理由もわかりません。どんな助けでも大歓迎です。

編集*: 私は初歩的なミスを犯しましたが、replaceAll は引き続き機能します。さらに、ループと条件を使用してこれを行うにはどうすればよいでしょうか? 以前のように散らかっていたでしょうか?

4

4 に答える 4

10

使用できます

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.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--;
    }
}
于 2013-09-19T23:39:55.967 に答える
1

indexOf("remove")つまり、名前付きremoveの値ではなく、(固定された) STRING を検索していることを意味します。あなたの試みにも同じことが当てはまります。StringremovereplaceAll("remove")

を削除して、固定文字列ではなく、"という名前の文字列の値を使用しているようにしますremove"remove"

例:

String remove = "test";
System.out.println(remove) // will print: test
System.out.println("remove") // will print: remove
于 2013-09-19T23:43:07.513 に答える
0

これを試して :

if(base.indexOf(remove) != -1){
base.replaceAll(remove,"");
}
于 2013-09-19T23:49:49.087 に答える
0

(?i)フラグまたはを使用する必要があります。

base = Pattern.compile(remove, Pattern.CASE_INSENSITIVE).matcher(base).replaceAll("");
于 2013-09-19T23:47:09.237 に答える