【问题标题】:Validate in Java only Int and double numbers仅在 Java 中验证 Int 和 double 数字
【发布时间】:2013-11-30 21:41:26
【问题描述】:

我想实现一个验证,该验证将从文本字段中接受一个数字(字符串),然后将其传递给一个双变量(如果其为 Int 或双精度),否则将引发新异常。

我已经实现了一个仅适用于 Int 数字的代码。请给我一个提示好吗?

protected double validateDiameter() {
    try {
        if (stringDiameter != null) {
     //Checking stringDiameter if its a number by creating a for loop 
            //that check each character of the string. 
            //If the string contains only numbers 
            //the program will continue, if not an exception is thrown.

            int lengthofdiameter = stringDiameter.length();

            int DiameterCount = 0;

            for (int i = 0; i <= lengthofdiameter - 1; i++) {
                char t = stringDiameter.charAt(i);
                if (Character.isDigit(t)) {
                    DiameterCount++;
                }
            }

            if (lengthofdiameter == DiameterCount) {
                Diameter = Double.parseDouble(stringDiameter);
                if (Diameter <= 0 && Diameter >= 9) {
                    throw new Exception("");
                }

            } else {
                throw new Exception("");
            }
        }
    } catch (Exception e) {
        Diameter = 0.0;

        JOptionPane.showMessageDialog(null,
                "Wrong value on the input area.Please use number." + "\n" + "Check diameter input.",
                "Error message!",
                JOptionPane.ERROR_MESSAGE);
    }

    return Diameter;
}

谢谢

更新:

感谢大家的帮助。对此,我真的非常感激。对我有用的解决方案是:

protected double validateDiameter() {
    try {
        if (stringDiameter != null) {
            if (stringDiameter.matches("-?\\d+(\\.\\d+)?")) {
                Diameter = Double.parseDouble(stringDiameter);
            } else {
                throw new Exception("");
            }
            if (Diameter <= 0 || Diameter > 8) {
                throw new Exception("");
            }
        } else {
            throw new Exception("");
        }
    } catch (Exception e) {
        Diameter = 0.0;

        JOptionPane.showMessageDialog(null,
                "Wrong value on the input area.Please use number." + "\n" + 
                        "Check diameter input.",
                "Error message!",
                JOptionPane.ERROR_MESSAGE);
    }
    return Diameter;
}

【问题讨论】:

    标签: java swing validation


    【解决方案1】:

    我的 s 是 stringDiameter;基本上,首先您尝试将输入解析为整数;如果这不起作用,您可以尝试加倍,如果仍然不起作用,则意味着它们都没有

        String s = "10.2";
        try {
            int i = Integer.parseInt(s);
            //int routine
            System.out.println(i);
        } catch (NumberFormatException e) {
            if (s.matches("-?\\d+(\\.\\d+)?")) {
                double d = Double.parseDouble(s);
                //double routine
                System.out.println(d);
            } else {
                // "Wrong value on the input area.Please use number." + "\n" + "Check                       //diameter input.", "Error message!",
                System.out.println("Wrong");
                throw new IllegalArgumentException();
            }
        }
    

    【讨论】:

    • 你的两个答案看起来都很好,我可以说没有我的那么复杂。唯一的问题是:如果输入是“Josh”、“10.Josh”等,则会引发新的惩罚,但像“2.F”或“1.30F”这样的输入是可以接受的,我不需要。如何在这些输入上引发异常?谢谢你的时间。非常感谢您的帮助!
    • @user3047017 看看我的回答stackoverflow.com/a/20306147/1282908
    • 您好,感谢您的回复,但异常处理是必要的。
    • @user3047017 也许您可以使用正则表达式来检查是否只有 nexus 建议的数字
    • @user3047017 看看这些答案。使用 DURING 评估也有一个正则表达式检查和非异常。之后你仍然可以抛出异常。
    【解决方案2】:
    boolean isDouble(String str) {
        try {
            Double.parseDouble(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
    
    boolean isInteger(String s) {
        try { 
            Integer.parseInt(s); 
            return true;
        } catch(NumberFormatException e) { 
            return false; 
    }
    

    }

    我必须承认我对你真正想要的东西有点困惑。上面的代码检查给定的字符串是否是双精度的,这是你要找的吗?

    【讨论】:

    • 我想检查输入值是整数还是双精度,如果为真则返回该值。否则抛出一个新的异常。例如:1、1.10、1.30、3 是可接受的,但“text”、“Josh”、“123.John”不是可接受的值。感谢您的回复
    • 上面的代码和整数一样,你只是使用 Integer.parseInt() 而不是 Double。如果这两种方法都返回 false,您可以引发异常 - 编辑了我上面的帖子。不客气。 :)
    • 如果它可以解析为Integer,我很确定它可以解析为Double,所以检查两者似乎有点过头了。
    • 你的两个答案看起来都很好,我可以说没有我的那么复杂。唯一的问题是:如果输入是“Josh”、“10.Josh”等,则会引发新的惩罚,但像“2.F”或“1.30F”这样的输入是可以接受的,我不需要。如何在这些输入上引发异常?谢谢你的时间。非常感谢您的帮助!
    【解决方案3】:

    Ben 和 user1121883 的两个答案都使用异常处理。如果需要不使用异常(检查时)的解决方案,那么我建议您在此处查看这些答案(以及以下答案):

    https://stackoverflow.com/a/5439547/1282908

    https://stackoverflow.com/a/1102916/1282908

    【讨论】:

      猜你喜欢
      • 2022-08-21
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2011-04-11
      • 2019-01-31
      • 2011-08-25
      • 1970-01-01
      相关资源
      最近更新 更多