关于java:如何检查字符串是否为数字?

How to check if a string is numeric?

本问题已经有最佳答案,请猛点这里访问。

我有一个GPA程序,它与equalsIgnoreCase()方法一起工作,该方法比较两个字符串,即字母"A"和用户输入,检查它们是否输入"A"。但现在我想添加一个异常,其中有一条错误消息,当输入一个数字时执行该异常。我希望程序认识到整数输入与字符串不同,并给出错误消息。我可以使用哪些方法将类型字符串变量与int类型的输入进行比较,并引发异常?


http://www.coderanch.com/t/405258/java/java/string-isnumeric上探讨了许多选项

还有一个是

1
2
3
public boolean isNumeric(String s) {  
    return s != null && s.matches("[-+]?\\d*\\.?\\d+");  
}

可能是杀伤力过大,但ApacheCommonsNumberUtils似乎也有一些助手。


如果允许您使用第三方库,请建议以下内容。

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/math/numberutils.html

1
2
NumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean


使用这个

1
2
3
4
5
6
7
8
9
10
11
public static boolean isNum(String strNum) {
    boolean ret = true;
    try {

        Double.parseDouble(strNum);

    }catch (NumberFormatException e) {
        ret = false;
    }
    return ret;
}


您也可以使用Apache ECOMMONS StrugUntus.IsQuali-HTP://Acth.Apache .org/Ont/Corm Lang/JavaDoc/API2.6/Org/Apache/Caluns/Lang/StrugUTLS。


简单方法:

1
2
3
4
5
6
7
8
9
10
11
12
public boolean isBlank(String value) {
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}


public boolean isOnlyNumber(String value) {
    boolean ret = false;
    if (!isBlank(value)) {
        ret = value.matches("^[0-9]+$");
    }
    return ret;
}

使用以下方法,

1
2
3
4
5
6
7
8
9
10
11
12
public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

如果要使用正则表达式,可以使用如下所示:

1
2
3
4
public static boolean isNumeric(String str)
{
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static boolean isNumeric(String string) {
    if (string == null || string.isEmpty()) {
        return false;
    }
    int i = 0;
    int stringLength = string.length();
    if (string.charAt(0) == '-') {
        if (stringLength > 1) {
            i++;
        } else {
            return false;
        }
    }
    if (!Character.isDigit(string.charAt(i))
            || !Character.isDigit(string.charAt(stringLength - 1))) {
        return false;
    }
    i++;
    stringLength--;
    if (i >= stringLength) {
        return true;
    }
    for (; i < stringLength; i++) {
        if (!Character.isDigit(string.charAt(i))
                && string.charAt(i) != '.') {
            return false;
        }
    }
    return true;
}


我最后在程序中编写了这个小方法,这样我就可以检查一个字符串是否是数字,或者至少每个字符都是数字。

1
2
3
4
5
6
7
8
9
10
private boolean isNumber(String text){
    if(text != null || !text.equals("")) {
        char[] characters = text.toCharArray();
        for (int i = 0; i < text.length(); i++) {
            if (characters[i] < 48 || characters[i] > 57)
                return false;
        }
    }
    return true;
}


可以使用character.isdigit(char ch)方法,也可以使用正则表达式。

下面是代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class CheckDigit {

private static Scanner input;

public static void main(String[] args) {

    System.out.print("Enter a String:");
    input = new Scanner(System.in);
    String str = input.nextLine();

    if (CheckString(str)) {
        System.out.println(str +" is numeric");
    } else {
        System.out.println(str +" is not numeric");
    }
}

public static boolean CheckString(String str) {
    for (char c : str.toCharArray()) {
        if (!Character.isDigit(c))
            return false;
    }
    return true;
}

}


要检查所有int字符,只需使用双负。如果(!)searchString.matches("[^0-9]+$")…

[^0-9]+$检查是否有非整数字符,如果为真,则测试失败。但不是那样,你就会成功。


以下是检查输入是否包含数字的方法:

1
2
3
if (input.matches(".*\\d.*")) {
    // there's a digit somewhere in the input string
}