0

我已经修复了我的代码,以便它识别他们的 4 位数和更少或 6 位数和更高,但现在我想知道它是否包含数字中的字母。

下面的代码检测字母并仅在我输入 5 个字母时打印我想要的行,并且我希望它检测它们的数字多于字母或字母多于数字。

    String digit;
    String regex;
    String regex1;
    regex = "[0-9]{5}";
    regex1 = "^[a-zA-Z0-9]{5}";
    String test;
    String validLength= "5";
    char one, two, three, four, five;
    {
    System.out.println("In this game, you will have to input 5 digits.");        
    do
    {
    System.out.println("Please input 5-digits.");
    digit = console.next();
    test = digit.replaceAll("[a-zA-Z]", "");
    if (digit.matches(regex))
    {
    one = (char)digit.charAt(0);
    two = (char)digit.charAt(1);
    three = (char)digit.charAt(2);
    four = (char)digit.charAt(3);
    five = (char)digit.charAt(4);
    System.out.println((one + two + three + four + five) / 2 );
    }
    else if (test.length() > 5 || test.length() < 5)
        {
            System.out.println("You have letters in there.");
        }
    else if (digit.matches(regex1))
    {
       test = digit.replaceAll("[a-zA-Z]", "");
       System.out.println("You have letters in there.");
    }
    else 

    if (digit.length() < 5)
        {
            System.out.println("You don't have enough digits.");
        }
        else if (digit.length() > 5)
        {
            System.out.println("You have to many digits.");
        }
} while (!digit.matches(regex));
4

2 回答 2

2

我不会在这里讨论正则表达式,因为老实说,我认为在走精细之路之前应该解决一些误解;另外,我不是专家,我个人认为它们更像是通行权。

无论如何,让我们从头开始,或者至少当您确定他们输入了有效的digit,

if (digit.matches(regex)).

比方说...

String digits = "12345";
System.out.println(getSum(digits) / 2);

在哪里...

public int getSum(String digits) {
  int sum = 0;
  for(int i = sum; i < digits.length(); i++) {
    sum += digits.charAt(i);
  }
  return sum;
}

和你的一样System.out.println((one + two + three + four + five) / 2 );

我希望 127 的输出能让你微笑。

走出去,因为你没有谈到“char”值总和,你希望它把你char的 s 当作十进制数字。那么,这将导致7. 我只是猜测是因为整件事(char)charAt()。这->(char)charAt()有点表明缺乏理解,这将使正则表达式的使用受到高度质疑,当然恕我直言。

除此之外else if (test.length() > 5 && test.length() < 5)。这就是说,“如果测试的长度大于且小于 5”!在不使用一些数学悖论的情况下,告诉我这个数字。

所以,关于你的问题——

但现在我想知道它是否在数字中包含字母。

好吧,让我们看看如何找出是否存在任何非数字-没有正则表达式,所以我们可以理解它......

public boolean containsNonDigits(String digits) {
    for(int i = 0; i < digits.length(); ++i) {
        if(Character.isDigit(digits.charAt(i))) {
            continue;
        } else {
            return true;
        }
    }
    return false;
}

这就是说,“如果字符是数字,请继续;一切都很好,否则是错误的”。

另一个“问题”——

即使他们的数字多于字母或字母多于数字,我也希望它能够检测到。

是上述方法的“添加剂”,所以我把那个留给你。

于 2013-11-03T10:16:05.243 回答
1

你可以使用Charachter.isDigit(char)Charachter.isLetter(char)方法。

这里实现了您所要求的代码示例:

public static void main(String[] args)
{
    System.out.println("In this game, you will have to input 5 digits.");
    int validLength = 5;
    boolean valid = false;
    Scanner console = new Scanner(System.in);
    while (!valid)
    {
        System.out.println("Please input 5-digits.");
        String digit = console.next();
        if (digit.length() != validLength)
        {
            //if length not valid, mark as not valid and return to next iteration
            valid = false;
            String message = digit.length() < validLength ? "You don't have enoght digits." : "You have to many digits.";
            System.out.println(message);
            continue;
        }
        //here digit.length = 5
        int nDigits = 0,nLetters = 0,sum = 0;
        for (int i = 0; i < digit.length(); i++)
        {
            Character ch = digit.charAt(i);
            if (Character.isDigit(ch))
            {
                nDigits++;
                sum += Integer.parseInt(ch.toString());
            }
            else if (Character.isLetter(ch)) {
                nLetters++;
            }
        }
        if (nLetters == 0           /* no letters */
                ||                  /* and */   
            nDigits == validLength  /* all chars are digits */)
        {
            System.out.println(sum/2);
            valid = true;
        }
        else{
            System.out.println("You have letters in there.");
        }
    }
}
于 2013-11-03T10:16:54.153 回答