2
String text;
System.out.println(text);

コンソールでは、次のようになります。

The US.....................................
Illinois Commerce .......... ..............
...........................................
..........................Illinois Commerce 

2番目の部分文字列を取り除く必要がありますIllinois Commerce


これは私が試したものです:

text = text.replaceAll("(?:Illinois Commerce:.*?){2}", "");

私は得るjava.lang.ArrayIndexOutOfBoundsException: 1

4

4 に答える 4

3

これは、空白または文字列の末尾が続くと仮定して実行する必要があります。

text = text.replaceAll("Illinois Commerce(?= ?$)", "");

または、この場合は次のようになります。

text = text.replaceAll("\bIllinois Commerce\s*$", "");
于 2013-10-12T17:17:57.307 に答える
2

これには正規表現を使用しません。私がすることは次のとおりです。

  • の最初の出現のインデックスを見つける"Illinois Commerce"
  • 部分文字列をindex + 1最後まで取得します。
  • その部分文字列の を置き換え"Illinois Commerce"ます。これにより、最初のオカレンスを置き換えないようにすることができます。これは、この部分文字列で完全に使用できるわけではないためです。
  • 次に、文字列の最初の部分を結果の部分文字列と連結します。

コードは次のようになります。

int index = text.indexOf("Illinois Commerce");      
String result = text.substring(0, index + 1) + 
                text.substring(index + 1).replace("Illinois Commerce", "");     
System.out.println(result);

  • text.substring(0, index + 1)I最初のまで文字列を取りますIlli....

  • text.substring(index + 1)l最初Illi....から文字列の終わりまで始まります。したがって、置換する唯一の文字列は 2 番目のオカレンスです。

于 2013-10-12T17:18:15.450 に答える
1

出現回数が 2 回しかないlastIndexOfため、この場合は正規表現よりも優れている可能性があります。

とにかく、以下は正規表現とそのlastIndexOf方法です。

public static void main(String[] args) {

    String test = "The US.....................................\n" +
       "Illinois Commerce .......... ..............\n" +
       "...........................................\n" +
       "..........................Illinois Commerce \n";
    String toFind = "Illinois Commerce";

    System.out.print("regex\n");
    System.out.println(test.replaceAll( "(?s)^(.*)"+toFind+"(.*)$", "$1$2" )); 

    System.out.print("\nlastIndexOf\n");
    int start = test.lastIndexOf(toFind);
    System.out.println( test.substring( 0, start)
            + test.substring(start+toFind.length())); 
}
于 2013-10-12T17:26:09.243 に答える