以下の問題は穴埋め問題です。
IDEなどにコピーしてかまいません。

1.文字数判定

俳句の文字数がルールに沿っているかどうか(17文字か?)を判定するプログラムである。

プログラムを完成させなさい。

package p07;

public class Q01 {
    public static void main(String args[]) {
        int stringLength;
        String s = "さみだれをあつめてはやしもがみがわ";
        
        stringLength = //ここに答えを書く;
        if (stringLength > 17) {
            System.out.println("字余りです。");
        } else if (stringLength < 17) {
            System.out.println("字足らずです");
        } else {
            System.out.println("ちょうど17文字です。");
        }
    }
}

2.パスワードの一致

ユーザーが入力したパスワードが正しいパスワード「abc」と同一かどうかの判定をするプログラムである。

しかし、このプログラムにはバグがある。

正しく、"abc"というパスワードを入れてもログインできないのである。

間違いを正しなさい。

package p07;

import java.util.Scanner;

public class Q02 {
    public static void main(String[] args) {
        String password = "abc";
        String passwordIn;
        
        System.out.print("パスワード?:");
        
        Scanner sc = new Scanner(System.in);
        passwordIn = sc.next();
        sc.close();
        
        if (password == passwordIn) {
            System.out.println("ログインしました。");
        } else {
            System.out.println("パスワードが違います。");
        }
    }
}

3.人工無能

次のプログラムは人工無能と英会話するゲームのプロトタイプである。

このゲームは、ユーザーがキーボード入力した英単語xxxに対して、コンピューターが「本当にxxxですね」と返事をする。

ユーザーがキーボード入力を繰り返す限り返事を繰り返す。

現在は、何も文字列を入力しなかった時に終了するようになっているので、「END」が入力された時に終了するようにしなさい。

なお、「END」、「End」、「end」のように大文字小文字を問わず終了すること。

※大文字小文字を問わない文字列比較の方法は標準APIやインターネット検索で調べてください。

package p07;

import java.util.Scanner;

public class Q03 {
    public static void main(String args[]) {
        String s = "START";
        Scanner sc = new Scanner(System.in);
        while (!s.isEmpty()) {
            System.out.println("お話ししましょう。");
            s = sc.nextLine();
            if (!s.isEmpty()) {
                System.out.println("本当に " + s + "ですね。\n");
            }
        }
        System.out.println("楽しかったです。 また、会いましょう!");
        sc.close();
    }
}

<出力例>

お話ししましょう。
Hello
本当に Helloですね。

お話ししましょう。
fine
本当に fineですね。

お話ししましょう。
goodby
本当に goodbyですね。

お話ししましょう。
eNd
楽しかったです。 また、会いましょう!

4.文字列の順序

ユーザーが入力した2つの英単語のアルファベット順(辞書順の前後関係)を判定するプログラムである。

例えば、"apple"は"melon"より前の単語である。

プログラムを完成させなさい。

※文字列の順序を比較する方法は標準APIやインターネット検索で調べてください。

package p07;

import java.util.Scanner;

public class Q04 {

    public static void main(String args[]) {
        String str1, str2;

        System.out.print("Input a English keyword:");
        Scanner sc = new Scanner(System.in);
        str1 = sc.next();
        System.out.print("Input another keyword:");
        str2 = sc.next();

//        int comp = //ここにコードを書く

        if (comp < 0) {
            System.out.println(str1 + " is the word before " + str2 + ".");
        } else if (comp > 0) {
            System.out.println(str1 + " is the word after " + str2 + ".");
        } else {
            System.out.println("The two words are the same.");
        }
    }
}

<結果の例>

Input a English keyword:apple
Input another keyword:melon
apple is the word before melon

5.メールアドレスの加工

メールアドレスからユーザー名とドメイン名を文字列の分割を使い別々に抽出したい。

以下のプログラムを完成させよ。

なお、どのようなメールアドレスでも動作することを確認すること。

※この問題も標準APIやインターネット検索で調べて解答してください。

package p07;

public class Q05 {
    public static void main(String[] args) {
        String email = "katsuya_imai●saycon.co.jp";
       
        //ここにコードを書く
    }
}

※コンプライアンスの関係でメールアドレスを書けないため@を●で代替しています。

<結果>

katsuya_imai
saycon.co.jp

6.エスケープシーケンス

次の文章をコンソールに表示しなさい。

彼は言った。「\3,000円のお買い上げです」
あなたは"私"に言っているのですか?
「私は'あなた'に言っているのです」

7.CSVの加工

カンマ区切りの文字列(CSV)をタブ区切り文字列(TSV)に変えたい。

以下のプログラムを完成させよ。

※この問題も標準APIやインターネット検索で調べて解答してください。

package p07;

public class Q07 {

    public static void main(String[] args) {

        String csv = "1,111-1111,愛知県名古屋市,山田太郎,090-999-99XX";
        String tsv = null;

        //ここにコードを書く

        System.out.println(csv);
        System.out.println(tsv);
    }
}

<結果>

tsv

8.StringBuilderクラスの意義

次のプログラムを実行して、その意味を考えなさい。

package p07;

public class Q08 {

    public static void main(String[] args) {
        final int COUNT = 10_000;

        String st = "";
        long startTime = System.currentTimeMillis();

        for (int i = 0; i < COUNT; i++) {
            String str = Integer.toString(i);
            st += str;
        }
        long endTime = System.currentTimeMillis();
        long sTime = endTime - startTime;

        StringBuilder sb = new StringBuilder();

        startTime = System.currentTimeMillis();

        for (int j = 0; j < COUNT; j++) {
            sb.append(Integer.toString(j));
        }
        endTime = System.currentTimeMillis();
        long sbTime = endTime - startTime;
        
        System.out.println(st);
        System.out.println("Stringを使った文字列の結合:" + sTime + "ミリ秒");

        System.out.println(sb);
        System.out.println("StringBuilderを使った文字列の結合 " + sbTime + "ミリ秒");
    }
}

※なお、SystemクラスのcurrentTimeMillis()メソッドは現在のシステム時刻をミリ秒の単位で返すメソッドです。
2時点間の時間の差分を取って経過時間を計測しています。

9.String.formatメソッド

以下のサンプルコードを参考にペアを紹介するコードを書いてください。

<実行結果の例>

今井さんをご紹介します!
年齢:25歳
身長:182.5cm
お誕生日:1995年04月19日
package p07;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Q09 {
	public static void main(String[] args) {
		// 文字列の埋め込み
		String name = "今井";
		String message = String.format("%sさんをご紹介します!", name);
		System.out.println(message);

		// 整数の埋め込み
		int age = 25;
		String ageMessage = String.format("年齢:%d歳", age);
		System.out.println(ageMessage);

		// 浮動小数点数の埋め込み
		double hight = 182.5;
		String hightMessage = String.format("身長:%.1fcm", hight);
		System.out.println(hightMessage);

		// 日付の埋め込み
		LocalDate date = LocalDate.of(1995, 4, 19); // 誕生日を設定
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
		String dateMessage = String.format("お誕生日:%s", date.format(formatter));
		System.out.println(dateMessage);
	}
}

10.オリジナル問題作成

将来の後輩のために良い問題が出来たら教えてください。
以上。
JavaSEの問題集トップページに戻る