2017-01-01 13 views
0

こんにちはおはようございます!異なるペアのcsvと印刷番号の値を比較する

私はこのようになりますcsvファイルで作業しています:

orange | red 
blue | green 
red | red 
brown | brown 
yellow | black 
grey | pink 

私の目標は、すべての行をスキャンし、各ペアは、同じ項目で構成されているかどうか確認しています。

異なるアイテムを持つ行の総数を印刷したいとします。私たちは4

を持っていると私はそのそれぞれの数と、それらを含む行印刷することもたいと思います。この場合

。この場合

1 orange red 
2 blue green 
5 yellow black 
6 grey pink 

私はここに同様の質問を探してきましたが、私は見つけることができるすべては、複数のCSVファイルについてでした。私は私がこれまで理解したものから... Javaを使用してい

、良いスタートは次のようになります。

Scanner scanner = new Scanner(new File("path to my csv file")); 
scanner.useDelimiter(";"); 
while(scanner.hasNext()){ 
// comparing items in rows 
} 
scanner.close(); 

私は今、whileループで何をするか分かりません。

多くの感謝!

+0

ファイルを1行ずつ読みます。各ラインについて、パイプセパレータを使用してラインを分割します。行の2つの要素が等しいかどうかを確認します。区切り文字として '; 'をつけたスキャナを使うと、' | '区切り文字を使って行を読んだり、分割したりするのに役立ちます。 –

+0

パイプは実際にありません! 2つの列を表示するだけです – NoobNe0

+0

次に、各行を分割するために ';'を使います。 –

答えて

2

各行の2つの項目がオプションの空白でセミコロンで区切られていることを前提として、以下の実装が有効です。これが当てはまらない場合は、各行の分割に使用する区切り文字を変更することができます。

int total = 0; 
int rowNum = 1; 
while (scanner.hasNext()) { 
    // comparing items in rows 
    String[] parts = scanner.nextLine().split("\\s*;\\s*"); 
    if (!parts[0].equals(parts[1])) { 
     System.out.println(rowNum + " " + parts[0] + " " + parts[1]); 
     ++total; 
    } 
    ++rowNum; 
} 

System.out.println("There were " + total + " rows where the two items were not equal."); 
+0

期待通りに動作します。ありがとうございます。ただ1つの質問:scanner.useDelimiter( ";");この場合、無駄になりますか? – NoobNe0

+1

@ NoobNe0空白はデフォルトの区切り文字の一部ですが、カスタム区切り文字を指定するとAFAIKが使用され、空白はデフォルトではなくなります。したがって、私は上記の答えを与えました。 –

+0

清算していただきありがとうございます。 – NoobNe0

関連する問題