如何测试非数字字符的输入字符串,如果找到非数字字符则返回false。
private static boolean luhnTest(String number){
int s1 = 0, s2 = 0;
String reverse = new StringBuffer(number).reverse().toString();
for(int i = 0 ;i < reverse.length();i++)
{
int digit = Character.digit(reverse.charAt(i), 10);
if(i % 2 == 0){//this is for odd digits, they are 1-indexed in the algorithm
s1 += digit;
}
else
{//add 2 * digit for 0-4, add 2 * digit - 9 for 5-9
s2 += 2 * digit;
if(digit >= 5)
{
s2 -= 9;
}
}
}
return (s1 + s2) % 10 == 0;
}
答案 0 :(得分:2)
一种方式是正则表达式("\d*"
),请参阅Pattern类。另一个,但有点臭,只是使用Integer.parseInt (...)
(或Long.parseLong( ...)
)并捕获异常。
答案 1 :(得分:0)
删除所有数字,看看是否剩下任何内容:
public class DigitsCheck{
public static boolean isOnlyDigits(String input) {
return (input.replaceAll("\\d", "").length() == 0);
}
public static void main(String []args){
System.out.println(isOnlyDigits("abc123"));
System.out.println(isOnlyDigits("123"));
}
}
可生产
false
true