我被要求编写一个应用程序,提示用户输入至少包含五个字母和至少五个数字的字符串。不断重新提示用户,直到输入有效的字符串。显示一条消息,指示用户是否成功输入了足够的数字、字母或两者。
我是一名初学者程序员,我需要帮助弄清楚如何使该应用程序正常工作。我的问题是我无法弄清楚如何让我的程序解释用户输入中的字母和数字。这是我到目前为止所拥有的:
public static void main(String[] args) {
// Declare variables.
String message;
int numLetters = 0;
int numDigits = 0;
boolean letters = false;
boolean digits = false;
// Input.
Scanner input = new Scanner(System.in);
System.out.println("Type a message with 5 letters and 5 digits: ");
message = input.nextLine();
// Loop through string.
最佳答案
正则表达式的黑暗艺术只需一个方法调用就可以解决这个问题:
public static boolean check(String input) {
return input.matches("(?i)(?=(.*?[a-z]){5})(?=(.*?\\d){5}).*");
}
分割:
matches()
方法接受一个正则表达式,该正则表达式必须匹配整个字符串才能返回 true- 基本匹配正则表达式是
.*
,它匹配所有内容 (?i)
表示“忽略大小写”[a-z]
是一个字符类,表示“任何小写字母”.*?[a-z]
表示“0-n 个字符(但可能是最小的数字)然后是一个字母”(.*?[a-z]){5}
表示“上述内容的 5 份副本”(?=(.*?[a-z]){5})
是一个“前瞻”,它断言但不消耗输入(因此您可以触发另一个输入)并且表示“输入中必须至少有 5 个字母”(?=(.*?\\d){5})
类似,但断言至少有 5 个数字
关于java - 我如何计算用户输入的字符串中有多少个数字和字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709522/