web-dev-qa-db-ja.com

Javaの文字列配列を反復処理します

いくつかのコンポーネントを持つ文字列配列がありますが、この配列には5つのコンポーネントがあり、時々異なります。私がやりたいのは、その配列を反復処理し、最初のコンポーネントとその隣のコンポーネントを取得することです。したがって、最初にコンポーネント番号1とコンポーネント番号2を取得し、2回目は番号2と3を取得し、3回目は番号3と4を取得します...など、最後のコンポーネントに到達するまで続きます。

これは私がどこまで来たか:

String[] elements = { "a", "a","a","a" };

for( int i = 0; i <= elements.length - 1; i++)
{
    // get element number 0 and 1 and put it in a variable, 
    // and the next time get element      1 and 2 and put this in another variable. 
}

どうすればこれを達成できますか?

62
ErikssonE

配列の要素の反復に対して ループの拡張 (Java 5以上の場合)を実行できます。

String[] elements = {"a", "a", "a", "a"};   
for (String s: elements) {           
    //Do your stuff here
    System.out.println(s); 
}
152
Michal
String[] elements = { "a", "a", "a", "a" };

for( int i = 0; i < elements.length - 1; i++)
{
    String element = elements[i];
    String nextElement = elements[i+1];
}

この場合、elements.lengthは4なので、[0,2]を反復処理して、要素0,11,2、および2,3を取得することに注意してください。

34
Stefan Kendall
String current = elements[i];
if (i != elements.length - 1) {
   String next = elements[i+1];
}

これにより、最後の要素に対してArrayIndexOutOfBoundsExceptionを取得しないようにします(「次」はありません)。他のオプションは、i < elements.length - 1を反復処理することです。要件によって異なります。

5
Bozho
String[] elements = { "a", "a","a","a" };

for( int i=0; i<elements.length-1; i++)
{
    String s1 = elements[i];
    String s2 = elements[i+1];
}
3
ascanio

elements.length - 1未満のiをテストする代わりに、i + 1未満のelements.lengthをテストすることを主張します。見ている配列のドメインを変更するのではなく(つまり、最後の要素を無視する)、各反復で見ている最大の要素を変更します。

String[] elements = { "a", "a","a","a" };

for(int i = 0; i + 1 < elements.length; i++) {
    String first = elements[i];
    String second = elements[i+1];
    //do something with the two strings
}
2
ILMTitan

アレイにアクセスする回数をシリアルに維持する必要があります。

int lookUpTime=0;

    for(int i=lookUpTime;i<lookUpTime+2 && i<elements.length();i++)
     {
    // do something with elements[i]
    }

lookUpTime++;
1
Rasel

これらのアルゴリズムは、比較のために両方とも正しくありません。

for(int i = 0; i <elements.length-1; i ++)

または

for(int i = 0; i + 1 <elements.length; i ++){

配列要素の範囲が0からlength - 1であることは事実ですが、その場合の比較はless than or equal toでなければなりません。それらは:

for(int i = 0; i <elements.length; i ++){

または

for(int i = 0; i <= elements.length-1; i ++){

または

for(int i = 0; i + 1 <= elements.length; i ++){

配列["a", "b"]は次のように反復します。

i = 0は<2です:elements [0]は「a」を生成します

i = 1は<2です。elements[1]は「b」を生成します

2は2未満ではないため、ループを終了します。

誤った例は、ループを途中で終了し、この2つの要素の単純な場合の最初の要素でのみ実行されます。

0
TrustButVerify
    String[] nameArray= {"John", "Paul", "Ringo", "George"};
    int numberOfItems = nameArray.length;
    for (int i=0; i<numberOfItems; i++)
    {
        String name = nameArray[i];
        System.out.println("Hello " + name);
    }
0
Ravichandra S V

パフォーマンスを探していて、反復の順序が関係ない場合は、最適化された逆ループを使用して反復できます。

for(int i=elements.lenth; --i>=0;) {...}

このような方法で、配列の長さを1回取得してから、インデックスをデクリメントし、1つのアトミック操作でゼロと比較します。最後ではありませんが、ゼロと比較することは非常に高速な操作であり、多くのプロセッサによって最適化されることがよくあります(アレイの有効範囲と比較するよりも高速です)。

0