テキストデータを読み込み、市外局番が4桁のものを抽出し、苗字のアルファベット順に並び替えてから、テキストに出力するという処理ですが、Exception in thread "main" java.util.ConcurrentModificationExceptionが出てしまいます。
read2の箇所でエラーがでているのは、理解できたのですが、エラーの意味が理解できません。
テキストデータは(1 Hiyomi Tanaka Oosaka 0120-3456-7890 3000)が何行かあるものです。
どなたかご教示頂ければと思います。
package account;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test04 {
private static final String FILE_PATH = "C:\\Users\\itcuser\\Downloads\\account.txt"; public static void main(String[] args) { List<String> myoujiList = new ArrayList<String>(); // ファイルの読み込み read(myoujiList); read2(myoujiList); read3(myoujiList); } public static void read(List<String> myoujiList) { BufferedReader br = null; try { br = new BufferedReader(new FileReader(FILE_PATH)); String line = null; // ファイルの読み込み while ((line = br.readLine()) != null) { String[] array = line.split("\\s"); if (array.length == 6) { myoujiList.add(array[2] + " " + line); } } // 昇順でソートする Collections.sort(myoujiList); for (String s : myoujiList){ System.out.println(s); } // 以下エラー処理 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { // if (br != null) { br.close(); // } } catch (IOException e) { e.printStackTrace(); } } } public static void read2(List<String> myoujiList){ for (String s : myoujiList) { // 条件から対象データを抽出する Pattern p = Pattern.compile("(.+)\\s(.+)\\s(.+)\\s(.+)\\s(.+)\\s(.+)\\s(.+)");// 任意の一文字、直前の文字の0回以上の繰り返しのもの Matcher m = p.matcher(s); if (m.matches()) { System.out.println(s); // 文字列にくっついている空白を削除し、グループを足し合わせて表示する myoujiList.add(m.group(2).trim() + " " + m.group(3).trim() + " " + m.group(4).trim() + " " + m.group(5).trim() + " " + m.group(6).trim() + " " + m.group(7).trim()); System.out.println((m.group(2).trim() + " " + m.group(3).trim() + " " + m.group(4).trim() + " " + m.group(5).trim() + " " + m.group(6).trim() + " " + m.group(7).trim())); } } }
public static void read3(List<String> myoujiList){
for (String s : myoujiList) { // 条件から対象データを抽出する Pattern p = Pattern.compile("\\s0\\d\\d\\d-"); Matcher m = p.matcher(s); if (m.find()) { System.out.println(s); // 対象データをファイルに書き出す try { FileWriter fw = new FileWriter("C:\\Users\\itcuser\\Downloads\\4digit.txt", true); BufferedWriter bw = new BufferedWriter(fw); bw.write(s); bw.newLine(); bw.close(); System.out.println("書き込みました。"); } catch (IOException ex) { ex.printStackTrace(); } } else { System.out.println("対象ではありません。"); } }
}}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/22 06:08
2017/02/22 06:23
2017/02/22 06:28
2017/02/22 06:45