- 締切済み
Javaの質問です
javaでリストの比較をしたいと思っています。 ファイルAの中身を抽出したものをArrayListで格納しました。そして次にファイルBの中身を抽出しました。 ファイルBで抽出したものとファイルAのリストの中身を検索し一致しているものがあったら ファイルBの中身の数値を追加したいと思っています。 ファイルAの中身 1,田中 2,山田 3,加藤 この中身をListにしたのが↓ ファイルAのList(カンマ区切り) [1][田中] [2][山田] [3][加藤] ファイルBの中身 1 test 100 となっており 一致したらファイルAに追加したい数値とはファイルBでいう100という数字です。 どうやって2つのものを比較をし検索したらいいのでしょうか? Mapというものを見つけたのですがこの例でいったらどのように書けばいいのでしょうか... よろしくおねがいしますっ
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mpro-gram
- ベストアンサー率74% (170/228)
読み込み部分は出来てるのですよね? java.util.Map<String,String> fa = new java.util.HashMap<String,String>(); // loopで ファイルAから1行ずつ読みながら、 HashMapに格納, 以下はテスト格納 fa.put("1","田中"); fa.put("2","山田"); // ファイルB の読み込みデータをList<String>に格納 java.util.List<String> fb = new java.util.ArrayList<String>(); // loopで ファイルBから1行ずつ読みながら、ArrayListに格納, 以下はテスト格納 fb.add("1"); fb.add("test"); fb.add("100"); // 書き込み先の準備: とりあえず、System.out.println() で書き出してみる // ファイルBが3行以上有れば処理する、とりあえずマッチする物が無くても、元のファイルAと同じ物を出力。 if(fb.size() > 2){ String flag = fb.get(0); if(flag != null){ for(String key : fa.keySet()){ String str = key + "," + fa.get(key); if(flag.equals(key) ){ str += "," + fb.get(2)); } System.out.println(str); } } }
- hitomura
- ベストアンサー率48% (325/664)
以下の点補足をお願いします。 (1)ファイルBの中身はこの3行だけなのか、それともこの3行形式のデータが複数並んでいるのか (2)2行目の test は気にしなくていいのか (3)あなたの言う「一致」はファイルAの行の最初の項とファイルBのデータの1行目とが一致するという事でいいのか (4)追加というのは 1,田中,100 ということでいいのか (5)ファイルBにデータがないファイルAの行はどのように処理をするか(「そのままの状態にしておく」「後方にカンマだけ付ける」「0という数値を付加する」等考えられます)
補足
補足させていただきます。 (1)ファイルBの中身はこの3行だけなのか、それともこの3行形式のデータが複数並んでいるのか ・ファイルBの中身はこの3行のものだけです (2)2行目の test は気にしなくていいのか ・今回の例の場合はtestはファイルAの中の要素と一致しないので気にしません。 (3)あなたの言う「一致」はファイルAの行の最初の項とファイルBのデータの1行目とが一致するという事でいいのか ・その解釈の通りです。 (4)追加というのは 1,田中,100 ということでいいのか ・そうねですねファイルAのListの最後尾に100を追加するような感じです。 (5)ファイルBにデータがないファイルAの行はどのように処理をするか 比較を行い1つも一致する行がなかったら終了させます。 以上です。少し説明が至らなくて申し訳ありませんでしたっ