前提・実現したいこと
Javaの課題を解いています。
List1の中にある要素を、HashSetを利用して抽出し、ファイルに「b,c,d」と出力したいのですが、
92行目にあるSystem.out.println(str);のstrには、「b,b,c,d」が格納されてしまい、しかもファイルには「d」のみしか出力されています。
該当のソースコード
Java
1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileNotFoundException; 4import java.io.FileReader; 5import java.io.FileWriter; 6import java.io.IOException; 7import java.io.PrintWriter; 8import java.util.ArrayList; 9import java.util.HashMap; 10import java.util.HashSet; 11import java.util.List; 12import java.util.Map; 13import java.util.Scanner; 14import java.util.Set; 15 16public class Kadai{ 17 18 public static void main(String[] args) throws IOException { 19 20 /** 21 * ・3つのファイルの中身を行単位で読み込みます。 ・3つのファイルの内容で一致するものがあれば、別ファイルにその一致した内容を書き出します 22 * ・出力ファイル名、入力ファイル名は問いません ・入力ディレクトリ、出力ディレクトリも問いません 23 */ 24 25 ques1(); 26 System.out.println("3つのファイルの中身を行単位で読み込みました"); 27 28 29 } 30 31 private static void ques1() throws IOException { 32 33 try { 34 35 File input1 = new File("/Users/Owner/OneDrive/会社 資料/20_開発課題/01_Java基礎課題L0-L10/参照ファイル/input1.txt"); 36 File input2 = new File("/Users/Owner/OneDrive/会社 資料/20_開発課題/01_Java基礎課題L0-L10/参照ファイル/input2.txt"); 37 File input3 = new File("/Users/Owner/OneDrive/会社 資料/20_開発課題/01_Java基礎課題L0-L10/参照ファイル/input3.txt"); 38 39 if (input1.exists() && input2.exists() && input3.exists()) { // ファイルが存在しているか確認 40 41 List<String> list1 = new ArrayList<>(); 42 43 FileReader filereader1 = new FileReader(input1); 44 FileReader filereader2 = new FileReader(input2); 45 FileReader filereader3 = new FileReader(input3); 46 47 BufferedReader br1 = new BufferedReader(filereader1); 48 BufferedReader br2 = new BufferedReader(filereader2); 49 BufferedReader br3 = new BufferedReader(filereader3); 50 51 String data1; 52 while ((data1 = br1.readLine()) != null) { 53 list1.add(data1); 54 } 55 String data2; 56 while ((data2 = br2.readLine()) != null) { 57 list1.add(data2); 58 } 59 String data3; 60 while ((data3 = br3.readLine()) != null) { 61 list1.add(data3); 62 } 63 64 // setを設定し、する。 65 Set set = new HashSet(); 66 67 FileWriter fw = null; 68 PrintWriter out = null; 69 70 // リストに入っている要素分繰り返す 71 for (String str : list1) { 72 73 // setに追加してみて、追加できなかった(重複していた)ら、strに格納 74 75 if (!set.add(str)) { 76 77 String path = "/Users/Owner/OneDrive/java.txt/input4.txt"; 78 79 //ここで「b,c,d」と、ファイルに書き込まれる 80 81 fw = new FileWriter(path); 82 out = new PrintWriter(fw); 83 84 System.out.println(str);//「b,b,c,d」 85 86 out.write(str);//「d」のみ 87 88 } 89 90 } 91 fw.close(); 92 out.close(); 93 94 } 95 96 } catch (FileNotFoundException e) { 97 System.out.println("ファイルが存在しません。"); 98 } catch (IOException e) { 99 e.printStackTrace(); 100 101 } 102 103 } 104}
試したこと
ほかにも、Setの代わりにMapを使って重複を抽出しましたが、「b、c、d」は格納できたのですが、ファイルにはやはり同じように[d]のみ出力されます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/29 07:56
2021/07/01 00:55