0

私の問題は、ユーザーがアルファベット以外のものを入力したときに例外をスローする必要があることです。

学校の課題の一部であるため、BufferedReader を使用しているという事実を変更することはできません。これが私のコードです:

public static String phoneList(String lastNameInput, String nameInput)
        throws IOException {

    BufferedReader bufferedreader = new BufferedReader(
            new InputStreamReader(System.in));

    try {

        System.out.println("Please input your first name.");
        // User input block
        String input = bufferedreader.readLine();
        nameInput = input;
    } catch (IOException e) {
        System.out.println("Sorry, please input just your first name.");
    }

    try {
        System.out.println("Please input your last name.");
        String input2 = bufferedreader.readLine();
        lastNameInput = input2;
    } catch (IOException e) {
        System.out
                .println("Sorry, please only use letters for your last name.");
    }
    return (lastNameInput + ", " + nameInput);

}

では、ユーザー入力に数字またはアルファベット以外の文字が含まれている場合、例外をスローするにはどのような方法を使用できますか?

4

2 に答える 2

3

私の問題は、ユーザーが文字列以外 (つまり、int、float、または double) を入力したときに例外をスローする必要があることです。

あなたが求めていることは意味がありません。たとえば、「12345」は文字列です。はい、そうです。したがって、電話readLine()をかけたときに行が数字だけで構成されている場合、数字だけで構成される文字列が得られます。

したがって、問題を解決するには、文字列を読み取った後、それを検証して、それが受け入れ可能な「名」であることを確認する必要があります。これにはいくつかの方法があります。

  • 最も粗雑な方法は、文字列を反復処理して、各文字が受け入れられるかどうかを確認することです。
  • 少し粗雑な (しかしおそらく間違っている) 方法は、文字列を浮動小数点数の整数として解析しようとすることです。(演習として、なぜ「おそらく間違っている」と言ったのかを考えてみてください。)
  • 洗練された方法はjava.util.regex.Pattern、受け入れ可能な名前に一致し、数字、埋め込まれた空白、句読点などの不要なものを除外するパターンを使用することです。

また、@DanielFischer のコメントが指摘しているように、名前にどの文字を使用できるかを慎重に検討する必要があります。アクセントは一例であり、他のものはキリル文字や漢字、ハイフンなどです。

于 2012-11-05T01:04:23.967 に答える
3

文字列にアルファベットのみを含める必要がある場合は、String.matches(regex) を使用します。

if(bufferedreader.readLine().matches("[a-zA-Z]+")){
System.out.println("user entered string");
}
else {
throw new IOException();
}

"[a-zA-Z]" 正規表現は、az または AZ からのアルファベットのみを許可します

または、正規表現を使いたくない場合。文字列をループして、数字でない場合は各文字をチェックする必要があります。

try{

        System.out.println("Please input your first name.");
        //User input block
        String input = bufferedreader.readLine();
        nameInput = input;
         for(int i=0; i<nameInput.length();i++){
             if(Character.isLetter(nameInput.charAt(i))){
                continue;
              }
              else {
                throw new IOException();
              }
           }
        } catch(IOException e){
            System.out.println("Sorry, please input just your first name.");
        }
于 2012-11-05T00:53:58.140 に答える