Files
java-cui-string-checker/example/src/StringCheck.java

114 lines
5.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import java.util.Scanner;
/*
* StringCheck.java
* ------------------------------------------------------------
* 【1日目・2日目終了時点のプログラム】
*
* これは、3日目ミッション「段階1〜3(メソッドへの切り出し)」の
* 出発点として使う、リファクタリング前のベースコードです。
*
* 3日目の段階1〜3では、このファイルの「動作(画面の表示内容)」は
* 一切変えずに、コードの「構造」だけを inputString() / setUpLogger()
* という別メソッドに整理し直していきます。
* これが実務でいう「リファクタリング(外から見た動きを変えずに、
* 中身の構造を整理すること)」です。
*
* この時点では、まだ次のことを行っていません(後日のミッションで扱います)。
* ・main以外のメソッドへの切り出し
* ・ログ出力(Logger)の実装
* ・例外処理(try-catch)
* ------------------------------------------------------------
*/
public class StringCheck {
public static void main(String[] args) {
// ============================================================
// 1日目 段階1:画面に表示する文言を、あらかじめ配列にまとめておく
// ============================================================
// 何度も使う固定の文言は、1つずつバラバラに書くのではなく、
// 配列にまとめておくと管理しやすい。
// messages[0] … 入力を促すプロンプト
// messages[1] … 未入力(または空白のみ)のときのエラーメッセージ
// messages[2] … 文字数が多すぎるときのエラーメッセージ
// messages[3] … 投稿が成功したときに表示するバナー
String[] messages = {
"いまなにしてる?",
"何も入力されていません",
"投稿文が長すぎます",
"↓↓↓↓↓↓ 投稿されました ↓↓↓↓↓↓"
};
// ============================================================
// 2日目 段階1:標準入力を読み取る準備をする
// ============================================================
// Scanner は、キーボードからの入力(標準入力)を読み取るためのクラス。
// ループの中で毎回新しく作るのではなく、ループの外で1回だけ用意して
// 使い回す。
Scanner scanner = new Scanner(System.in);
// 投稿内容(前後の空白を除去したあとの文字列)を保持する変数。
// while文を抜けたあとでも使うので、while文の外で宣言しておく。
String str = "";
// ============================================================
// 2日目 段階1:while(true) で「正しい入力が得られるまで繰り返す」
// ============================================================
// 何回繰り返すかがあらかじめ決まっていないので、while(true) の
// 無限ループにして、条件を満たしたときに break でループを抜ける
// 作りにする。
while (true) {
// ---- 1日目 段階3:プロンプトの表示 ----
// 配列の0番目に入れておいたプロンプト文言を表示する。
System.out.println(messages[0]);
// ---- 1日目 段階2:標準入力の読み込みと空白除去 ----
// キーボードから1行分の文字列を読み取る。
String line = scanner.nextLine();
// 読み取った文字列の前後にある空白文字(半角スペース・全角スペース
// など)を取り除き、str に格納する。
str = line.strip();
// ---- 1日目 段階3:比較演算子で真偽値を求める ----
// 1日目の時点ではif文がまだ使えなかったため、この2つの真偽値は
// 画面に表示して目視確認するだけだった。
// 2日目からは、この真偽値をそのままif文の条件として使う。
boolean isEmpty = (str.length() == 0);
boolean isTooLong = (str.length() > 140);
// ============================================================
// 2日目 段階2:if文による検証ロジック
// ============================================================
if (isEmpty) {
// 何も入力されていない(または空白のみ入力された)場合
System.out.println(messages[1]);
// continue で、while文の先頭(プロンプト表示)に戻り、
// もう一度入力をやり直してもらう。
continue;
}
if (isTooLong) {
// 141文字以上入力された場合
System.out.println(messages[2]);
// continue で、while文の先頭に戻る。
continue;
}
// ここまで到達したということは、
// 「空文字でもなく、文字数超過でもない」=正しい入力が得られた
// ということなので、break でループを抜ける。
break;
}
// ============================================================
// 1日目 段階3:投稿完了処理(検証をクリアしたあとの表示)
// ============================================================
// 空行を1行はさんでから、投稿完了バナーと投稿内容を表示する。
System.out.println();
System.out.println(messages[3]);
System.out.println(str);
}
}