0

質問を介して、レポート所有者の名を文字列として入力します。

条件付きで、名に0〜9の数字が含まれていないことを確認するための正規表現が必要です。含まれている場合は、削除する必要があります。名に空白を含めることもできません。

    do
    {
        System.out.println("Please enter your FIRST name:");
        firstName = keyboard.next();
        firstName= firstName.toUpperCase();
    }

    while( !firstName.matches("^/s^[a-zA-Z]+$/s"));

    System.out.println("Thanks " + firstName);

Output
p
Please enter your FIRST name:
p p
Please enter your FIRST name:
Please enter your FIRST name:
4

6 に答える 6

3

正規表現が混乱しています。これを試して:

while(!firstName.matches("^[^\\d\\s]+$"));

正規表現"^[^\\d\\s]+$"は、「非数字または空白、および少なくとも1文字」を意味します

于 2012-07-14T05:52:31.890 に答える
0

数字を削除したい場合は、次のように強制します。

\D*

あなたのマッチャーで

于 2012-07-14T05:16:14.527 に答える
0

試す

firstName =  firstName.replaceAll("[\\d\\s]", "").toUpperCase();
于 2012-07-14T11:57:17.420 に答える
0

これを試すことができます。Rubular.comを使用して作成しました。の

Pattern nameRequirment = Pattern.compile("^((?!.[\\d\\s]).)*$");

while (!nameRequirement.matcher(myString).matches()){
  //... prompt for new name
}
于 2013-04-23T15:16:31.810 に答える
0

firstname大文字であり、メソッドはmatches入力全体に一致するため、 [A-Z]+十分です。

while( !firstName.matches("[A-Z]+"));

また

while( !firstName.matches("\\p{Lu}+"));
于 2012-07-14T05:56:53.043 に答える
0

これを試してください: ^[a-zA-Z,.'-]+$. :D

また、正規表現を試してみたい場合は、rubular.comが最適です。:D

Scanner#nextLine の代わりに Scanner#next を使用しました。

Scanner#next JavaDoc から:

このスキャナーから次の完全なトークンを検索して返します。完全なトークンの前後には、区切り文字パターンに一致する入力が続きます。

そのような区切り文字の1つは\s+:Dだと思います

import java.util.Scanner;

public class FirstNameParser {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String firstName = null;

        do {
            System.out.print("Please enter your FIRST name: ");
            firstName = keyboard.nextLine();
            firstName = firstName.toUpperCase();
        }

        while (!firstName.matches("^[a-zA-Z,.'-]+$"));

        System.out.println("Thanks " + firstName);

    }
}
于 2012-07-14T05:36:34.990 に答える