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); } }