2015-10-25 180 views
1

如何检查passCode是否包含数字?我必须使用方法isDigit()
我知道如何只用charAt()检查一个字符,但不能检查整个单词。检查字符串是否有数字

public class CheckingPasscodes { 
    public static void main (String [] args) { 
     boolean hasDigit = false; 
     String passCode = ""; 
     int valid = 0; 

     passCode = "abc"; 

     // if (?) 
     hasDigit = true; 

     if (hasDigit) { 
      System.out.println("Has a digit."); 
     } else { 
      System.out.println("Has no digit."); 
     } 
     return; 
    } 
} 

回答

4

使用一个循环来检查每个字符的密码

hasDigit = false; 
    for (int i = 0; i < passCode.length(); ++i) { 
     if (Character.isDigit(passCode.charAt(i))) { 
      hasDigit = true; 
      break; 
     } 
    } 
-3
for (int i=0;i<=passcode.length();i++) 
char a=passcode.charAt(i); 
if (a.isDigit()) 
    System.out.print("Has digit"); 
else 
    System.out.print("No digits found"); 
+0

这将IF String类有一个“hasDigit工作“ 方法。 – Thevenin

+0

@marks我修正了它:-) –

+1

不,它不会以任何方式工作,因为它会抛出一个'IndexOutOfBoundsException',即使这没有问题,也没有大括号。 'char'是一个原始类型,它没有方法。即使如此,它只会一遍又一遍地分配“a”,然后测试最后一个,这不算作正常工作。这就是为什么你总是**使用大括号。 –

5

使用正则表达式可以帮助你:

hasDigit = passCode.matches(".*\\d+.*"); 
+1

贞操点:如果该字符串中还包含[行终止符](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html# lt),因为''。默认情况下不匹配它们。如果需要,可以通过用'[\ S \ s]'替换'.'来修复。即'hasDigit = passCode.matches(“[\\ S \\ s] * \\ d + [\\ S \\ s] *”);'。或者更整齐地说,直接使用'Pattern'类来避免'String.matches'总是尝试匹配整个字符串的限制:'hasDigit = java.util.Pattern.compile(“\\ d”).matcher (密码).find();' – Boann

相关问题