2012-01-31 9 views
2

ファイルを読み込んでリストに追加し、リストを読み込んで文字列を分割して比較し、何かを実行します。 は、私はこの例外を取得:ArrayIndexOutOfBoundsExceptionが発生するのはなぜですか?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

私は私のコードを修正する必要がありますか?

for (Productname m : listIP) { 
     if (m.getIdentifier() == null || m.getProductname() == null) { 
       addToNonSimilarList(m.getProductname()); 
     } else { 
      String id = m.getIdentifier().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase(); 
      String product = m.getProductname().replaceAll("(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])", " ").toUpperCase(); 
      id = id.replaceAll("\\s+", " "); 
      product = product.replaceAll("\\s+", " "); 
      if (!id.equalsIgnoreCase(product)) { 
       if (id.contains(" X ") && product.contains(" X ")) { 
        String[] ide = id.split(" (?=X\\s*\\d+)"); 
        String[] prod = product.split(" (?=X\\s*\\d+)"); 
        System.out.println(m.getMnemonic()); 
        if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim())) { 
         String[] i = ide[0].split(" (?=\\d+)"); 
         String[] p = prod[0].split(" (?=\\d+)"); 
         if (i[0].trim().equalsIgnoreCase(p[0].trim())) { 
          //do nothing 
         } else { 
          addToNonSimilarList(m.getProductname()); 
         } 
        } else { 
         addToNonSimilarList(m.getProductname()); 
        } 
       } else { 
        addToNonSimilarList(m.getProductname()); 

       } 
      } 
     } 

    } 

答えて

2

さて、この状態は危険なになります。それぞれに少なくともの要素があるかどうあなたがテストしているが、あなたはそれぞれに要素を使用している

if (ide.length > 0 && prod.length > 0 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) { 

あなたが達成しようとしていることを伝えるのは難しいですが、length条件または配列インデックスを変更したいと思われます。また、このメソッドを短いものに分割し、わかりやすくするために、Patternオブジェクトへの参照付きの名前の付いた静的変数を作成することもできます。

EDIT:本当に各配列の2番目の要素を使用する場合は、示唆D」:

if (ide.length > 1 && prod.length > 1 
    && ide[1].trim().equalsIgnoreCase(prod[1].trim())) { 
+0

はい、この2つの 'ide [1] prod [1]'の2番目の要素が同じかどうかチェックしてください。 **より良い方法は何ですか?** – itro

+0

@itro:少なくとも1つではなく、各配列に少なくとも2つの要素*があることを確認してください。 –

1
if (ide.length > 0 && prod.length > 0 && ide[1].trim().equalsIgnoreCase(prod[1].trim())) 

長さは、最初の要素は、IDE [0]及びPROD [0]ただし、IDEを使用している[1]及びPRODの[によりアクセスすることができるものと等しい場合1]である。これがエラーの原因です

+0

'ide.length> 0 && prod.length> 0'を削除すると、同じエラーが発生します。すべての分割の2番目の要素をチェックアウトする必要があります。最も良い方法は何ですか? – itro

+0

あなたは最初の要素が、ide [1]とprod [1]の代わりにideの[0]とprod [0]を使用して処理されていると仮定しています。 –