【问题标题】:How do I ensure that the user does not enter numbers in his / her name?我如何确保用户不会在他/她的名字中输入数字?
【发布时间】:2013-10-29 01:01:26
【问题描述】:

我要求用户输入他/她的姓名。 我该怎么做才能不排除数字?

String name = " ";
System.out.println("Enter Name");
name = Keyboard.readString();

【问题讨论】:

  • 你能告诉我什么是正则表达式吗?我是编程新手

标签: java string variables


【解决方案1】:

使用正则表达式检查输入和循环以获得好的答案:

String name = "";
while (true) {
    System.out.println("Enter Name");
    name = Keyboard.readString();
    if (name.matches("[a-zA-Z]+"))
        break;
    System.out.println("Invalid input. Enter letters only");
}

【讨论】:

  • matches 是否要求整个字符串匹配?如果没有,您需要锚定它(^$
  • @Kevin 是的。 ^ 和 $ 隐含在 java 的 matches() 中,与 JavaScript、perl、ruby 等不同
  • 多么糟糕的设计。虽然不是 Java 的第一个。
  • @kevin 我同意 :( 如果有事实上的标准,除非你有充分的理由不使用它。请参阅 this answer 了解更多 java 中的设计错误
【解决方案2】:
boolean numberOrNot = name.matches(".*\\d.*");

numberOrNot 将是 true 如果它的名字有任何数字,否则它将是 false

regex 的意思是,正则表达式。 -?\\d+ 是一个正则表达式。

  • -?: 负号,可以没有也可以有一个
  • \\d+:一位或多位数字

但这是验证,我认为您不能对控制台进行限制。

【讨论】:

  • 你觉得我应该怎么做然后@Pshemo
  • 非常感谢..但由于我是初学者,我更喜欢使用 Bohemian 的答案,这更容易理解..但非常感谢您的帮助 :)
【解决方案3】:

您不能让用户在输入时只在控制台中输入字符而不输入其他任何内容,但是您可以验证他的输入并在输入后检查它是否仅包含字母字符,如果无效,请用户再次输入他的数据。

要检查 String 是否仅包含字母字符,您可以遍历其所有字符并在其上使用 Character.isAlphabetic(character) 或仅使用 matches 和正则表达式,例如 userData.matches("\\p{IsAlphabetic}+");

Character.isAlphabetic\\p{IsAlphabetic} 优于检查 a-zA-Z 范围,因为它也接受非英文字符,如 ąę

【讨论】:

  • 因为我是初学者,所以使用 a-z 范围对我有好处。但非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2012-12-27
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多