ボードの状態をファイルに保存し、後でファイルから読み取ってボードを再作成する必要がある小さなボードゲーム プログラムを作成しています。
この機能を以下に示すクラスに委任しています。ボードの正方形の保存形式とその座標が SQUARE_FORMAT 定数でキャプチャされ、同じ情報を読み取るための正規表現が LOAD_REGEX 定数でキャプチャされるように、これを実装したいと思います。両方がコードで相互に関連し、視覚的に解読できる必要があります (つまり、同じデータに相互に関連していることを人が明確に確認できる必要があります)。
Javaコードでこれを行うためのイディオムまたはパターンはありますか?
public class BoardPersistenceUtility {
private final String SQUARE_SAVE_FORMAT = "";
private fial String LOAD_REGEX = "";
public void save(PrintWriter writer, Board board) {
}
public Board load(BufferedReader reader) {
// Implement
return null;
}
}
更新 1:
私の質問をもう一度読むと、正確に何を探しているのか、少し混乱するかもしれません。SQUARE_SAVE_FORMAT を表す正しい方法を具体的に探しているので、正規表現 LOAD_REGEX と明確に相関します。
SQUARE_SAVE_FORMAT は、実際の値に置き換えられる特殊文字/変数を使用する文字列であることが理想的であり、結果はファイルに保存されます。LOAD_REGEX は、ファイルからコンテンツを読み取るために使用される対応する正規表現です。正規表現はキャプチャ グループを使用するため、キャプチャ グループから取得した値から元のオブジェクトを再作成できます。
私の質問は、そのような文字列のペアを作成する際のイディオムは何ですか.1つはデータの保存に使用されるフォーマット文字列であり、もう1つはそのデータの読み取り中に使用される正規表現です.
更新 2:
もう少し考えてみると、私の質問をもう少し明確にすることができたと思います。
両方の文字列を見ると、SQUARE_SAVE_FORMAT は、ボード上の正方形のテキストを作成するために String.format() で使用されるフォーマット文字列であり、ファイルに保存されます。定数 SQUARE_LOAD_REGEX は、行を読み取り、関連する部分を名前付きグループにキャプチャするために使用される正規表現であるため、元のオブジェクトを再作成できます。(私の正規表現が少し間違っていたらごめんなさい...私はすぐに何かを書きましたが、これが本当に必要なものであることを確認するためにいくつかの正規表現の原則を更新する必要があります)
これら両方の文字列を視覚的に見ると、それらを相互に関連付けるのは困難です。おそらく、Java フォーマット文字列に名前付き変数がないためです。できる最善の方法は、%i を指定することです。ここで、i は引数のインデックスです。
このような文字列のペアを表す慣用句またはパターンがあるかどうかを理解したいと思います.1つは一部のデータをテキストにフォーマットするために使用され、もう1つは同じテキストを読み取ってその部分を解析するために使用されます.
public class BoardPersistenceUtility {
private final String SQUARE_SAVE_FORMAT =
"%d,%d:%b-%s";
private final String SQUARE_LOAD_REGEX =
"^(?<row>\d*),(?<col>\d*):(?<mine>true|false)-(?<status>\w)$";
public void save(PrintWriter writer, Board board) {
}
public Board load(BufferedReader reader) {
// Implement
return null;
}
}