0

「galery」で始まり「jssdk));」で終わる文字列の部分文字列を削除したい

たとえば、次の文字列を考えてみましょう:
Galery something something.... jssdk));

「something something....」を削除して「Galery jssdk));」を返すアルゴリズムが必要です。

これは私がやったことですが、うまくいきません。

newsValues[1].replaceAll("Galery.*?jssdK));", "");
4

4 に答える 4

3

おそらく改善される可能性があります、私はそれを速くしました:

  public static String replaceMatching(String input, String lowerBound, String upperBound{
    Pattern p = Pattern.compile(".*?"+lowerBound+"(.*?)"+upperBound+".*?");
    Matcher m = p.matcher(input);
    String textToRemove = "";

    while(m.find()){
        textToRemove = m.group(1);
    }
    return input.replace(textToRemove, "");
}

回答を受け入れるための更新Thxですが、ここにレビューされたより小さなバージョンがあります:

 public static String replaceMatching2(String input, String lowerBound, String upperBound){
      String result = input.replaceAll("(.*?"+lowerBound + ")" + "(.*?)" + "(" + upperBound + ".*)", "$1$3");
      return result;
 }

アイデアは実際には非常に単純で、文字列を 3 つのグループに分割し、それらの 3 つのグループを最初と 3 番目のグループに置き換え、2 番目のグループを削除します。

于 2012-08-22T07:29:10.737 に答える
2

あなたはほとんどそこにいますが、それは文字列全体を削除します. Galeryとの間の何かを削除したい場合はjssdK));、次のようにする必要があります。

String newStr = newsValues[1].replaceAll("(Galery)(.*?)(jssdK\\)\\);)","$1$3");

これにより、文字列がグループに入れられ、これらのグループを使用して文字列全体が置き換えられます。正規表現構文では、)は特殊文字であるため、エスケープする必要があることに注意してください。

String str = "GaleryABCDEFGjssdK));";
String newStr = str.replaceAll("(Galery)(.*?)(jssdK\\)\\);)","$1$3");
System.out.println(newStr);

これにより、次の結果が得られます。GaleryjssdK));

@amit によって提示されたソリューションがより単純であることは知っていますが、メソッドを使用できる便利な方法を示すことをお勧めしますreplaceAll

于 2012-08-22T07:23:09.217 に答える
0

最も簡単な解決策は、文字列を「エッジ」だけに置き換え、それらの間のすべてを効果的に「削除」することです。

newsValues[1].replaceAll("Galery.*?jssdK));", "GaleryjssdK));");

1:""ここで使用したのは、正確に置き換えているわけではないためです。文字列は不変であることを覚えておいてください。つまり、「削除された」部分を除いて、新しいオブジェクトを作成しています。

于 2012-08-22T07:21:08.233 に答える
0
newsValues[1] = newsValues[1].substring(0,6)+newsValues.substring(newsValues[1].length()-5,newsValues[1].length())

これは基本的に「Galery」と「jssdk」を連結し、他のすべてを残すか無視します。さらに重要なことに、単に newValues[1] = "Galeryjssdk" を割り当てることができます

于 2012-08-22T07:30:28.590 に答える