0

事前入力されたArrayListを検索する場合は、それを呼び出します

List<String> myList= new ArrayList<String>();

特定の正規表現値を含むこれらの要素に基づいて、新しい要素を追加しようとしています。要素の1つの部分文字列を返す必要があるだけで、成功しています。たとえば、私が持っている場合

String removable = "X";

要素に存在する、それを呼び出す

ABCDX

Xは簡単に削除され、コードを使用してArrayListに追加されます。

   if(myList.get(i).length() == 5 && myList.get(i).substring(4,5).contains(removable))
   {
            myList.add(i+1, myList.get(i).substring(0, 4));
   }

しかし、私が次のような要素を持っているとき

ABXCD ,

私はそれを扱うことができると思いました

 if(myList.get(i).length() == 5 && myList.get(i).substring(2,3).contains(removable))
   {
            myList.add(i+1, myList.get(i).substring(0, 2).substring(3, 5));
   }

文字列インデックスの範囲外例外が発生します。これをどのように修正できますか?

4

4 に答える 4

1

2番目のコード例では、使用しています

abc1List.get(i)

これはすべきではありません

myList.get(i)

編集

私はあなたの問題はあなたが部分文字列を部分文字列にしていることだと思います。あなたのコードはこれを行います

myList.get(i).substring(0, 2).substring(3, 5)

つまり、文字列のサブストリングを取得してから、以前に取得したサブストリングのサブストリングを取得します。最初の部分文字列の長さはわずか2文字であるため、存在しないインデックス3から開始しようとすると、2番目の部分文字列は範囲外に戻ります。

あなたのコードはほとんど次のように評価されます:

"ABXCD ,".substring(0,2) = "AB"

"AB".substring(3,5) = Out of bounds substring retrieval!

あなたは次のようなことをする必要があります

myList.get(i).substring(0, 2) + myList.get(i).substring(3, 5)

またはあなたがやりたいことをする別の方法を見つけてください。

于 2012-10-25T09:25:15.487 に答える
0

含まれているかどうかを確認した後X

string = string.replaceAll("X","");

次にそれをリストに追加します

于 2012-10-25T09:26:12.610 に答える
0

abc1List.get(i).substring(0, 2).substring(3, 5)間違っているようです。あなたは部分文字列の部分文字列を取るつもりはありませんか?あなたは次のようなものが欲しいです:

myList.add(i+1,abc1List.get(i).substring(0, 2));
myList.add(i+2,abc1List.get(i).substring(3, 5));
于 2012-10-25T09:31:55.733 に答える
0

はい、確かに問題は別の部分文字列の部分文字列を形成することです。substring(0、2)は、greterの長さで別のsubstringを形成する3文字のみを含むため、エラーが発生します。+演算子を使用して、2つの部分文字列を連結できます

于 2012-10-25T09:49:52.317 に答える