2012-03-21 26 views
0

文字列と他の文字列を順番に比較し、次の文字列に移動してその下の文字列と比較することができます。文字列と他の文字列をシーケンシャルで比較する

ここに私のコードです。最初の文字列を正しく比較し、一致するものがないと判断します。しかし、もう一方のforループがiの次の値に移動すると、everystring = 1となるので、それ自体が比較されます。どのように私は別のループを通過するたびに内側のループの値を1つの値を移動について行くことができますか?これは、内側のループのすべての反復をスキップします

if (i == everything) continue; 

:[内部ループ内] 0からchildren.lengthに常に

for (int everystring = 0; everystring < children.length; everystring++) { 

    String current = children[everystring].substring(0, 
     children[everystring].indexOf("_")); 

    for (int i = 1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
      children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

     System.out.println("Match"); 
     } else 
     System.out.println("No Match"); 
    } 
    System.out.println(); 
} 
+0

その文字列と比較します。 – user541597

+0

外側のforループにi = everystring + 1を追加して修正しました。 – user541597

+0

サンプルデータを追加できますか?私たちがあなたの意図を知っていればそれは助けになるかもしれません。いずれにしても、ループ内にループカウンタを増分することができます。ただ私は+ +と言う。またはeverystring ++; – JohnnyK

答えて

1

ループ、は、内側ループの最初に以下の条件を追加しますここではi == everythingであるため、等しくない文字列のみをチェックします。あなたは、たとえば二回(各2つの文字列をチェックしますことが

注:あなたがそれをしたくない場合は、i == 1everything == 2i == 2, everything == 1
をチェックします:内部ループで反復をeverything + 1からchildren.length

まで
+0

OPは "その文字列をその下の他のすべての文字列と比較する..."と尋ねました。以前にチェックされたすべての文字列をスキップするのではなく、文字列を文字列と一致させるだけの答えがあります。 – sharakan

+0

@sharakan:「それ以下」は明確な定義ではなく、私は両方の可能性を与え、両方の説明を含め、彼が好きなものを選ぶことができます。 – amit

0
This. 
for (int everystring = 0; everystring < children.length - 1; everystring++) { 

    String current = children[everystring].substring(0, 
     children[everystring].indexOf("_")); 

    for (int i = everystring + 1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
      children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

     System.out.println("Match"); 
     } else 
     System.out.println("No Match"); 
    } 
    System.out.println(); 
} 
1

質問が正しく分かったら、内部ループのイニシャライザでeverystringの値を使用するだけです。

for (int everystring = 0; everystring < children.length; everystring++) { 
    String current = children[everystring].substring(0, 
    children[everystring].indexOf("_")); 
    for (int i = everystring+1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
     children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

      System.out.println("Match"); 
     } else 
      System.out.println("No Match"); 
     } 
    System.out.println(); 
} 

これは、各文字列を配列の後に表示されるすべての文字列と比較します。

+1

これは、everystring == children.length - 1のときに配列インデックスアウトバウンドを引き起こします。 –

+0

@RalfHoppenそうはなりません。 'i == children.length'のときは' i amit

+0

がtrueです。申し訳ありません。 –

0
int i = 0;  

    for (int everystring = 0; everystring<children.length; everystring++){ 

     String current = children[everystring].substring(0,children[everystring].indexOf("_")); 

     i = everystring+1; 

    for (;i<children.length; i++){ 
     String innercurrent = children[i].substring(0,children[i].indexOf("_")); 



     if(current.equalsIgnoreCase(innercurrent)){ 

     System.out.println("Match"); 
     }else System.out.println("No Match"); 

     /* if (current.substring(0,current.indexOf("_")).equalsIgnoreCase(innercurrent.substring(0,innercurrent.indexOf("_")))){ 




      System.out.println("Match"); 


     }*/ 

    } 
    System.out.println(); 
    } 
} 
0

これはあなたがそこにいる奇妙なコードです。

for (int i = 0; i < children.length - 1; i++) { 
    String current = children[i].substring(0,children[i].indexOf("_")); 

    for (int j = i + 1; j < children.length; j++) { 
     String compareTo = children[j].substring(0,children[j].indexOf("_")); 

     if (current.equalsIgnoreCase(compareTo)) 
      System.out.format("%s matches %s\n", current, compareTo); 
     else 
      System.out.format("%s doesn't matches %s\n", current, compareTo); 
    } 
} 

このようにすれば、すべてを一度比較するだけで、同じ位置を自分と比較することはありません。