-1

我需要检测用户号不应该包含字符。

我知道这种方法:

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

还有其他更好更简单的解决方案吗?

4

5 回答 5

2

您可以在此处使用正则表达式。目前,您的代码正在测试字符串是否至少包含一位数字。如果你愿意,你可以使用:

// Modification of your code. Test string contains at least 1 digit
public boolean haveDigit(String str) {
    return !str.replaceAll("\\D+", "").isEmpty();
}

但是根据您的文本,您想测试字符串是否仅包含一个数字。为此,您可以使用:

// Test is string only contains digit and no other character
public boolean isDigit(String str) {
    return str.matches("\\d+");
}
于 2013-09-30T18:45:36.573 回答
1
public boolean isNumeric(String num)
{
    try
    {
        Integer.parseInt(num);
        return true;
    }
    catch(NumberFormatException e)
    {
        return false;
    }
}
于 2013-09-30T18:45:16.890 回答
1

使用Pattern类和正则表达式。这个方法等于你的方法。

public boolean haveDigit(String str) 
{
   Pattern p = Pattern.compile(".*[0-9].*");
   Matcher m = p.matcher(str);
   return m.matches();
}  

测试

haveDigit("d9h");    //true
haveDigit("d9agh6"); //true
haveDigit("hello");  //false

下一个方法检查你问什么

public boolean isNumeric(String str) 
{
   Pattern p = Pattern.compile("[0-9]+");
   Matcher m = p.matcher(str);
   return m.matches();
}  

测试

isNumeric("r5t"); // false
isNumeric("100"); // true
isNumeric("0.5"); // false
于 2013-09-30T18:45:59.567 回答
1

怎么样(OP编辑后的更新版本)

if (str.matches("\\D+")){
   // str contains only non-digits characters 
   // and its length is one or more.
   // If user wants also to accepts empty strings instead '+' should use '*'
}else{
   // str contains digit (or is empty if we used '+')
}
于 2013-09-30T18:46:25.467 回答
0

看看Integer.parseInt(String)整数是否存在。

public boolean checkNumeric(String str) {
    try { 
         Integer.parseInt(str);  // parse to check if the integer is an integer
         return true;
     } catch (NumberFormatException ne) {
         return false;
 }
于 2013-09-30T18:45:27.953 回答