2012-03-13 16 views
0

splitメソッドが2つの要素を持つ配列を返さないのはなぜですか?文字列分割メソッドは2つの文字列を返しません

for(int i = 0; i < temparray.size(); i++) 
{ 
if (temparray.get(i).contains("_")) 
    System.out.println("True" + temparray.get(i).length() + " " + temparray.get(i)); 
String[] temp = temparray.get(i).split("_"); 
System.out.println(temp[0]); 
//System.out.println(temp[1]); 
//friendsOld.add(new Friend(temp[0],temp[1])); 
} 

いずれかの行のコメントを外すと、ArrayOutofBoundsException: 1と表示されます。 printlnは常にTrue、Stringの長さ、そして最後にStringではなく_のStringを返します。

Iは、配列をcharに文字列を変換し、それを手動で分割substring()を用い、次いで_の位置を見つけるためにindexOf()を使用して文字列を壊し、.split()用負のパラメータを試してみました。 String自体に問題があるかもしれませんが、ここでは文字列の配列のコードはArrayList<String> temparray = new ArrayList<String>();です。

+2

temparray.get(i)に格納されている正確な文字列値は何ですか? –

+0

あなたはそのコードをどんな文字列に適用していますか?いくつかの例を示して、解決策を見つけるのを手助けするのが簡単になります。 – pcalcao

+0

他の人がすでに言及しているように、あなたはいくつかの括弧を忘れているかもしれません。しかし、後続の空の文字列は含まれていないので、文字列 "foo_"はセパレータを含んでいても1つの要素だけを返します(http://docs.oracle.com/javase/1.4.2/を参照してください)。ドキュメント/ API/Javaの/ LANG/String.html#スプリット%の28java.lang.String%の29) –

答えて

8

あなたのif文の後にカッコを忘れてしまったようです:あなたはそれを書いた

if (temparray.get(i).contains("_")) { 
    System.out.println("True" + temparray.get(i).length() + " " + temparray.get(i)); 
    String[] temp = temparray.get(i).split("_"); 
    System.out.println(temp[0]); 
    System.out.println(temp[1]); 
    friendsOld.add(new Friend(temp[0],temp[1])); 
} 

方法、文字列は、それがアンダースコアが含まれていない場合でも、分割されています。 "True [...]"の出力のみが1つを含む文字列に限定されます。

デバッガの使用を開始する必要があります。デバッガを使用すると、例外ブレークポイントに達したときに変数の値が表示され、コード内のバグをさらに追跡できます。

+0

私は中括弧を持つつもりはありませんでした。 if文は、単に文字列が "分割"に有効であることを確認するためのものです。 'temparray'の各要素は' contains() 'に対してTrueを返します。 – sushain97

+0

本当に、すべての要素にアンダースコアが含まれていることは確かですか(コンソールに印刷するだけでなく)?どの要素で例外が発生しますか? – Matthias

+0

あなたのコメントは何かを実現させ、別の 'inStream.readLine();'を追加すると正しく動作しました。私は最初に間違った行を読んでいた。ありがとうございました。 – sushain97

4

すべてのコードを中括弧で囲んだのですか?

for(int i = 0; i < temparray.size(); i++) 
{ 
    if (temparray.get(i).contains("_")) { 
     System.out.println("True" + temparray.get(i).length() + " " + temparray.get(i)); 
     String[] temp = temparray.get(i).split("_"); 
     System.out.println(temp[0]); 
     //System.out.println(temp[1]); 
     //friendsOld.add(new Friend(temp[0],temp[1])); 
    } 
} 
+0

私は中括弧を持つつもりはありませんでした。 if文は、単に文字列が "分割"に有効であることを確認するためのものです。 'temparray'の各要素は' contains() 'に対してTrueを返します。 – sushain97

3

if条件は次の行にのみ適用されます。したがって、temparray.get(i)に '_'が含まれていない場合は、splitから単一の結果しか得られません。

関連する問題