0

文字列を分割しようとしていますが、正しい出力が得られないようです。これは、渡された文字列です。

1#0:250:250:

私は最初にこれを行います

String[] dataArray = data.split("#");

これは私に与える

1
0:250:250:

私はそれからこれをします

for( int i = 0; i < totalPlayers; i++)
            {
                String[] pos = dataArray[i++].split(":");
                if( Integer.parseInt( pos[0] ) == ID )
                {
                    //do nothing
                }
                else
                {
                assets[i].setPosition( Integer.parseInt( pos[1] ),     Integer.parseInt( pos[2] ) );
                }
            }

ArrayIndexOutOfBoundsException というエラーが表示されます。pos[0] を出力すると 1 が返されます。pos[1] を出力すると ArrayIndexOutOfBoundsException が返されます。文字列が次のように分割されないのはなぜですか

0
250
250

?

乾杯

キャンバス

4

4 に答える 4

1

初めて、iになります0。それは本質的に意味dataArray[0]1ます。したがって、これを行うと:-

String[] pos = dataArray[i++].split(":");

pos配列には 1 つの要素しかありません(つまり) 。したがって、またはにアクセスしようとすると、 が取得されます。pos[0]1pos[1]pos[2]ArrayIndexOutOfBoundsException

于 2013-03-28T03:17:17.733 に答える
1

1コードにエラーがあり、代わりに分割されています0:250:250:変数が式で使用された後i++、後置インクリメント演算子 (例: ) が変数をインクリメントすることを思い出してください。したがって、ループの最初の行は実際には.String[] pos = dataArray[i].split(":"); i = i + 1;

簡単な修正は、 に変更i++することです++i。これにより、基本的に行が として実行されi = i + 1; String[] pos = dataArray[i].split(":");ます。ただし、この正確なバグが、++複雑なステートメント内での演算子の使用が混乱を招く可能性があり、しばしば推奨されない理由です。さらに、forステートメントの外側でループ変数をインクリメントすると、さらに混乱が生じる可能性があります。

あなたが本当に表現したいアイデアは「配列をペアでループする」ことなので、次のように書くことをお勧めします

for (int i = 0; i < totalPlayers; i += 2) {
    String[] pos = dataArray[i + 1].split(":");
    // (the same as above)
}
于 2013-03-28T03:22:07.530 に答える
0

pos は 2 回作成され、1 回は要素として 1 のみが作成されます。2 回目は 0、250、250 になります。

于 2013-03-28T03:18:39.983 に答える
0

この問題は、分割関数が正規表現 (regex) を取るという事実によるものだと思います。

コロンは正規表現の特殊文字であるため、バックスラッシュでエスケープする必要があります。

Java では、バックスラッシュを別のバックスラッシュでエスケープする必要があります。

したがって、「:」だけでなく「\\:」で分割してみてください。

于 2013-03-28T03:20:13.287 に答える