簡単な地名作成ツールを作る 羅列した漢字から重複を除いた漢字を一文字ずつに分割しそのままコピペすれば配列として使えるように出力するやつ作成編

簡単な地名作成ツールを作る 検討編

検討してしまったので作るしかありません。

ということで羅列した漢字から重複を除いた漢字を一文字ずつに分割しそのままコピペすれば配列として使えるように出力するやつを作ります。

開発はVSCode上に構築したJava開発環境で

Visual Studio CodeでJavaの環境を構築する

何でも良いのですが、せっかく構築したのでVSCodeで作ります。

テキストファイルの読み込み

テキストファイルに列挙した漢字を利用するのでテキストファイルを読み込めるようにします。

今回の処理だと一文字ずつ読み込めたほうが便利なのでFileReaderクラスを利用します。使い方はググってください。

パスの指定にはバックスラッシュが2つ必要です。また、hoge.read()では文字ではなくUTF-8に対応した文字コードが渡されるので注意しましょう。(char)hoge.read()で文字になります。

また、hoge.read()をするたびに次を読み込みに行くので、文字読み込みチェックでhoge.read()を使い、その後にその文字を代入するつもりでもう一回(char)hoge.read()なんてことをすると謎動作をするコードになるので気をつけましょう。時間を無駄にします。

重複チェック

プログラミング問題で解くようなコードを書けばできると思います。私はArrayListとか.equalsとか使いました。

テキストファイルの出力

配列として使えるように体裁を整えたものを出力します。

FileWriterとか使います。ググってください。

.close()したときに書き込まれます。

完成したコード

package app;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class App {
public static void main(String[] args) throws Exception {
try{
File inputFile = new File(“C:\\hoge\\hoge.txt”); //入力テキストファイル指定
FileReader fileReader = new FileReader(inputFile); //入力テキストファイル読み込み

ArrayList<Character> charList = new ArrayList<Character>(); //読み込んだ文字リスト
boolean doubleCheck = true; //重複チェック用変数

int readCharCode = fileReader.read(); //テキストから読み込んだ文字コードを代入
if(readCharCode != -1){ //文字が読み込まれている場合
charList.add((char)readCharCode); //初回代入
}

readCharCode = fileReader.read(); //次の文字の文字コード読み込み
while(readCharCode != -1){ //文字が読み込まれている限りループ
for(int i = 0;i <= charList.size() – 1; i++) { //charListに代入されている文字数回ループ
if(charList.get(i).equals((char)readCharCode)){ //文字が被っていたら
doubleCheck = false; //重複チェックにfalse代入
break; //forから抜け出す
}
}

if(doubleCheck){ //doubleCheckがtrueならば
charList.add((char)readCharCode); //doubleCheckに文字コードから文字に変換して追加
}

doubleCheck = true; //doubleCheckをリセット
readCharCode = fileReader.read(); //次の文字の文字コード読み込み
}
fileReader.close(); //ファイルを閉じる

File outputFile = new File(“C:\\hoge\\hogehoge.txt”); //出力テキストファイル指定
FileWriter fileWriter = new FileWriter(outputFile, true); //出力テキストファイルを追加書き込みで読み込み

fileWriter.write(“{” + “\”” + charList.get(0) + “\””); //配列のコードになるように追加
for(int i = 1;i <= charList.size() – 1;i++){
fileWriter.write(“, ” + “\”” + charList.get(i) + “\””);
}
fileWriter.write(“}”);

fileWriter.close(); //ファイルを閉じる
}catch(FileNotFoundException e){ //ファイルが存在しない時
System.out.println(“ファイルが存在しません”);
}catch(IOException e){
System.out.println(“入出力エラー”); //入出力でエラーが発生した時
}
}
}

Advertisement

超絶読みにくいとは思いますが、参考にしたい方は参考にしてください。自信はありません。

私もGitHubとか使い始めるべきなのでしょうかね・・・(環境から揃えるタイプ)

なお、入力350文字、出力600文字程度でも一瞬で処理してくれます。すごいですね・・・