我如何计算用户输入的字符串中有多少数字和字母?

时间:2015-02-25 01:21:36

标签: java loops user-input

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

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

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.

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

创建一个方法来检查它是否有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);
}

然后您可以将此方法添加到while循环中:

while(!check(message)){
    // get the input again and assign it to message
}

答案 2 :(得分:-3)

HA !!!!我认为......对于那些需要REFERENCE答案的孩子们来说,看看这个!因为每个人都喜欢跳舞,在这里提供一个好的答案是复制和粘贴代码将起作用。 (请不要把它作为你自己的,但请查看这个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!");
}
}

那就是那些人!感谢你的幸运星,你有一个直接的在线参考!哈哈哈没有什么比寻找某种方向更糟糕了,所有你得到的是半@ $$ 3D提示。请随意查看其工作原理。

相关问题