【问题标题】:How to check if a string is numeric? [duplicate]如何检查字符串是否为数字? [复制]
【发布时间】:2012-12-21 19:42:05
【问题描述】:

我有一个 gpa 程序,它与equalsIgnoreCase() 方法一起使用,该方法比较两个字符串,即用户输入的字母“a”,它检查他们是否输入了“a”。但是现在我想添加一个带有错误消息的异常,该错误消息在输入数字时执行。我希望程序意识到整数输入与字符串不同并给出错误消息。我可以使用哪些方法将类型 String 变量与类型 int 的输入进行比较,然后抛出异常?

【问题讨论】:

  • Pattern.compile("[0-9]+").matches(string),也许?
  • 那么你想只匹配个整数还是任意数字?
  • 我基本上不希望他们输入任何数字,只是字符串

标签: java


【解决方案1】:

http://www.coderanch.com/t/405258/java/java/String-IsNumeric 探索了许多选项

还有一个是

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

可能有点矫枉过正,但Apache Commons NumberUtils 似乎也有一些帮手。

【讨论】:

  • 我会将最后一个“+”更改为“*”,以便123. 成为有效输入(小数分隔符后的任何内容都不是有效输入)
  • 我会添加一个检查 NULL ...否则它会崩溃
  • @StefanMichev 人们应该停止传递空参数。世界上的每个方法都有一个 null、empty 或任何检查是不正确的。
  • 这是简单的代码,但数以百万计的 Java 程序员必须编写它。它应该在那个标准库中。
【解决方案2】:

如果您被允许使用第三方库,请提出以下建议。

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

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

【讨论】:

  • 你不需要任何第三方:循环:if(Character.isDigit(c))
  • 当心! isNumeric 和 isDigits 只处理纯数字。即,他们将为 7,574 返回 false。 (逗号分隔的数字)。
  • isNumber(str:String) 已弃用
【解决方案3】:

使用这个

public static boolean isNum(String strNum) {
    boolean ret = true;
    try {

        Double.parseDouble(strNum);

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

【讨论】:

  • 尝试捕捉其他异常 :) 如果你发送了一个 Null 对象字符串,这将失败
【解决方案4】:

【讨论】:

  • 我没有投票给你,但你不需要添加更多软件。在 Java SE 中:循环:if(Character.isDigit(c))
  • 当心! isNumeric 只处理纯数字。即,它将为 7,574 返回 false。 (逗号分隔的数字)。
【解决方案5】:

简单方法:

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;
}

【讨论】:

    【解决方案6】:

    使用下面的方法,

    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        double d = Double.parseDouble(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }
    

    如果你想使用正则表达式,你可以使用如下,

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

    【讨论】:

    • 尝试捕获异常会产生巨大的开销。
    • 使用Double.parseDouble()的方法对于国际化编码情况是不可接受的。它在美国可以很好地工作,但在其他国家/地区具有有效双精度的数字字符串不一定能正确解析。例如,在某些语言环境中,千位分隔符可以是空格“”,而“123 456”会导致 NumberFormatException,即使它是可解析的数字。
    【解决方案7】:
    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;
    }
    

    【讨论】:

      【解决方案8】:

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

      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;
      }
      

      【讨论】:

        【解决方案9】:

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

        下面是sn-p:

        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;
        }
        

        }

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

          • 嘿,谢谢,这有帮助,但是 m 程序在异常抛出后仍然终止。如果我取出异常,它会完美运行......即使有一个数字也是我要求的方式。在我抛出异常后如何保持 prgm 运行的任何想法
          • 将抛出 ex ration 的代码包装在 try-catch 中,捕获抛出的异常。
          • 我已经尝试将提示输入的代码的整个部分包装在 try catch 中,但它不起作用,你能用我上面发布的代码澄清一下吗
          • 什么代码贴在哪里?我看不到任何代码。
          【解决方案11】:

          要检查所有 int 字符,您可以简单地使用双重否定。 if (!searchString.matches("[^0-9]+$")) ...

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-01-03
            • 1970-01-01
            • 2011-11-27
            • 1970-01-01
            • 1970-01-01
            • 2011-01-23
            • 2019-01-25
            • 1970-01-01
            相关资源
            最近更新 更多