Java 如何计数?查看用户输入的字符串中有多少数字和字母?

Java 如何计数?查看用户输入的字符串中有多少数字和字母?,java,loops,user-input,Java,Loops,User Input,我被要求编写一个应用程序,提示用户输入至少包含五个字母和五个数字的字符串。持续重新输入用户,直到输入有效字符串。显示一条消息,指示用户是否成功或输入的数字、字母或两者都不够 我是一个初学者程序员,我需要帮助找出如何使这个应用程序正常工作。我的问题是我无法弄清楚如何让我的程序解释用户输入的字母和数字。以下是我到目前为止的情况: public static void main(String[] args) { // Declare variables. String message

我被要求编写一个应用程序,提示用户输入至少包含五个字母和五个数字的字符串。持续重新输入用户,直到输入有效字符串。显示一条消息,指示用户是否成功或输入的数字、字母或两者都不够

我是一个初学者程序员,我需要帮助找出如何使这个应用程序正常工作。我的问题是我无法弄清楚如何让我的程序解释用户输入的字母和数字。以下是我到目前为止的情况:

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.

创建一个方法来检查它是否有5个字母和5个数字:

public boolean check(String input){
    int numDigits = 0;
    int numLetters = 0;
    for(int i=0; i<input.length();i++){
        if(Character.isLetter(input.charAt(i))) numLetters++;
        if(Character.isDigit(input.charAt(i))) numDigits++;
    }
    return (numDigits >= 5) && (numLetters >= 5);
}

哈!!!!我得到了它。。。对于所有需要参考答案的孩子们,看看这个!因为每个人都喜欢跳舞,所以这里给出一个很好的答案就是复制粘贴代码。(请不要把它作为你自己的交上来,但是看看这个PITA代码是如何工作的

//Date: 5/31/2015
//Subject: Mod 4, pg 389, Question 3 
//Purpose:User is to input 5 digits and 5 letters. It will re prompt user until at least 5 digits and 5 letters are typed in.
import java.util.Scanner;
public class FiveLettersAndFiveDigits
{
public static void main(String[] args)
   {
Scanner keyboard = new Scanner(System.in);
int numDigits = 0;
int numLetters = 0;
String message;
System.out.println("Please enter a 5 letter word and 5 digits.");
message = keyboard.nextLine();
while(numLetters < 5 &&numDigits <5)
{
for(int i=0; i < message.length();i++)
    if(Character.isLetter(message.charAt(i)))  ++numDigits;
for(int j=0; j < message.length();j++)
    if(Character.isDigit(message.charAt(j))) ++numLetters;
    if(numLetters >= 5 && numDigits >= 5)
    {
    System.out.println("You have " +numDigits+ " numbers and " +numLetters+ " letters, great job.");
    }
    else
    {
    System.out.println("You have typed in "+numDigits+" letters and "+numLetters+" numbers. Please try again.");
    System.out.println("Please enter a 5 letter word and 5 digits.");
    message = keyboard.nextLine();
    continue;
    }
 }
 System.out.println("This problem was no fun, hahaha. Took me like 3 hours!");
}
}
//日期:2015年5月31日
//主题:第4版,第389页,问题3
//用途:用户输入5位数字和5个字母。它将重新提示用户,直到输入至少5位数字和5个字母。
导入java.util.Scanner;
公共类五位字母和五位数字
{
公共静态void main(字符串[]args)
{
扫描仪键盘=新扫描仪(System.in);
int numDigits=0;
int numleters=0;
字符串消息;
System.out.println(“请输入5个字母的单词和5个数字”);
message=keyboard.nextLine();
而(numLetters<5&&numDigits=5&&numDigits>=5)
{
println(“你有“+numDigits+”数字和“+numLetters+”字母,干得好。”);
}
其他的
{
System.out.println(“您已键入“+numDigits+”字母和“+numleters+”数字。请重试。”);
System.out.println(“请输入5个字母的单词和5个数字”);
message=keyboard.nextLine();
继续;
}
}
System.out.println(“这个问题一点也不好玩,哈哈哈。花了我3个小时!”);
}
}

这就是朋友们!感谢你们的幸运星,你们有一个直接的在线参考!哈哈哈,没有什么比寻找某种方向更糟糕的了,你们得到的只是半个$$3D提示。请随意看看这是如何工作的。

正则表达式的黑暗艺术只需一个方法调用就可以解决这个问题:

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个数字

将输入转换为
char
数组,循环
char
数组,并使用
Character.isleter
Character.isDigit
。有关更多详细信息,请参阅和。也可能有帮助
public static boolean check(String input) {
    return input.matches("(?i)(?=(.*?[a-z]){5})(?=(.*?\\d){5}).*");
}