エンジニア 技術

アルファベット進数(26進数)のリストとテキストファイルの作成(Java)【備忘録】

文字列データのファイルを作成するプログラムを書いてみました。

データの条件
・文字数指定(今回は4文字)
・重複しない(DB上の制約)
・必要なデータ数:1000件(最大で45万件近くのデータを作成可能)

数十万件のテストデータを手作業では作れないのでテストのために再度PGを書くということです

やっていることをざっくり紹介すると

・AAAA , AAAB , AAAC...ZZZZまでループ処理によって配列の値を変えてリストを作成

・リストをファイルに書き込み出力

とこんな感じです。


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class make16 {

	public static void main(String[] args) {
		String filePath = ("/Users/kuma/opt/出力テストデータ/testdata.txt");//出力先パスとファイル名を入力
		String[] dataList = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
				"R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
		int num = 26;
		List<String> makeList = new ArrayList<>();
		int cnt = 1000;// 作成データ数

		try {
			FileWriter file = new FileWriter(filePath);
			PrintWriter pw = new PrintWriter(new BufferedWriter(file));

			check: for (int i = 0; i < num; i++) {
				String[] make = { "0", "0", "0", "0" };
				make[0] = dataList[i];
				for (int j = 0; j < num; j++) {
					make[1] = dataList[j];
					for (int k = 0; k < num; k++) {
						make[2] = dataList[k];
						for (int g = 0; g < num; g++) {
							make[3] = dataList[g];
							String data = String.join("", make); // 以下最終ループ処理
							makeList.add(data); 
							if (makeList.size() == cnt) {
								break check;
							}
						}
					}
				}
			}
			System.out.println("データ数:" + makeList.size());
			System.out.println("出力先:" + filePath);
			for (String str : makeList) {
				pw.println(str); //書き込み
			}

			pw.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

ハイっ!

無事出力されました〜

多重ループの停止:ラベル付きbreak

多重ループの最初に『ラベル名:』
break処理部に 『break ラベル名;』

こうすることで多重ループを抜けること可能

-エンジニア, 技術