3

基本的に、私の状況では、キーボードからのユーザー入力によって定義された文字列が、ある場合はアルファベット文字のみであり、別の場合は数字のみであるかどうかを確認する必要があります。これはJavaで書かれています。

私の現在のコード:

switch (studentMenu) {
                case 1: // Change all four fields
                    System.out.println("Please enter in a first name: ");

                    String firstNameIntermediate = scan.next();
                    firstName = firstNameIntermediate.substring(0,1).toUpperCase() + firstNameIntermediate.substring(1);
                    System.out.println("Please enter in a middle name");
                    middleName = scan.next();
                    System.out.println("Please enter in a last name");
                    lastName = scan.next();
                    System.out.println("Please enter in an eight digit student ID number");
                    changeID();
                    break;
                case 2: // Change first name
                    System.out.println("Please enter in a first name: ");
                    firstName = scan.next();
                    break;
                case 3: // Change middle name
                    System.out.println("Please enter in a middle name");
                    middleName = scan.next();
                    break;
                case 4: // Change last name
                    System.out.println("Please enter in a last name");
                    lastName = scan.next();
                case 5: // Change student ID:
                    changeID();
                    break;
                case 6: // Exit to main menu
                    menuExit = true;
                default:
                    System.out.println("Please enter a number from 1 to 6");
                    break;
            }
        }
    }

public void changeID() {
    studentID = scan.next();
    }

StudentID が数字のみで、各名前セグメントがアルファベット順であることを確認する必要があります。

4

6 に答える 6

6

java.util.Scanner次のトークンがメソッドを使用して特定のパターン/タイプであるかどうかをすでに確認できhasNextXXXます。

boolean hasNext(String pattern)正規表現を使用して、次のトークンが文字のみで構成されていることを検証するために使用する例を次に示します[A-Za-z]+

    Scanner sc = new Scanner(System.in);
    System.out.println("Please enter letters:");
    while (!sc.hasNext("[A-Za-z]+")) {
        System.out.println("Nope, that's not it!");
        sc.next();
    }
    String word = sc.next();
    System.out.println("Thank you! Got " + word);

セッションの例を次に示します。

Please enter letters:
&#@#$
Nope, that's not it!
123
Nope, that's not it!
james bond
Thank you! Got james

次のトークンが変換可能な数値であることを検証するにはint、を使用hasNextInt()してからnextInt()

関連する質問

于 2010-06-22T06:51:29.843 に答える
4

正規表現でこれを行うのがおそらく最も簡単です。サンプルコードは次のとおりです。

import java.util.regex.*;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        System.out.println(isNumeric("123"));
        System.out.println(isNumeric("abc"));
        System.out.println(isNumeric("abc123"));

        System.out.println(isAlpha("123"));
        System.out.println(isAlpha("abc"));
        System.out.println(isAlpha("abc123"));
    }

    private static final Pattern NUMBERS = Pattern.compile("\\d+");
    private static final Pattern LETTERS = Pattern.compile("\\p{Alpha}+");

    public static final boolean isNumeric(String text)
    {
        return NUMBERS.matcher(text).matches();
    }

    public static final boolean isAlpha(String text)
    {
        return LETTERS.matcher(text).matches();
    }
}

おそらく、入力が正しくなるまでプロンプト/フェッチ/チェックの適切なループを実行する「getAlphaInput」と「getNumericInput」のメソッドを作成する必要があります。あるいはgetInput(Pattern)、異なるパターンに対して同様のコードを書くことを避けるためかもしれません。

また、「文字」としてカウントされるものに関する要件も検討する必要があります。上記では、az と AZ のみが使用されます。アクセントなどにも対処する必要がある場合は、Patternドキュメントをよく見て、適切に調整する必要があります。

正規表現を使用して、文字列の長さなども検証できることに注意してください。彼らは非常に柔軟です。

于 2010-06-22T06:41:12.730 に答える
0

これが最善の方法かどうかはわかりませんが、次のように Character.isDigit() と Character.IsLiteral() を使用できます。

for( char c : myString.toCharArray() ) {
    if( !Character.isLiteral(c) ) {
        // 
    }
}
于 2010-06-22T06:38:22.657 に答える
0

ユーザーが無効な値を入力するのを防ぐことはできないと思いますが、受け取ったデータを検証するオプションがあります。私は正規表現のファンです。非常に簡単に、おそらく次のようなものです(すべての値が空の文字列に初期化されます):

while (!firstName.matches("^[a-zA-Z]+$")) {
    System.out.println("Please enter in a first name");
    firstName = scan.next();
}

...

while (!studentID.matches("^\\d{8}$")) {
    System.out.println("Please enter in an eight digit student ID number");
    changeID();
}

この方法をとる場合は、検証が必要なさまざまなケースを分類し、それぞれに対処するためのいくつかのヘルパー メソッドを作成することもできます。

「正規表現」は最初は圧倒されるように思われがちですが、学習することには大きな価値があり、チュートリアルには事欠きません。

于 2010-06-22T06:38:32.710 に答える
0

regexp を試してください: \d+ -- 数値、[A-Za-z]+ -- アルファベット順

于 2010-06-22T06:38:39.810 に答える