有没有办法通过说“变量!= int”来验证数据

时间:2014-11-12 18:50:05

标签: java if-statement int conditional-statements validation

所以这基本上就是我想要我的代码所说的,以避免在用户选择"Tea"而不是使用相应的整数的情况下编译错误。

if(appSelection < 1 || appSelection > appetizersArray.length || appSelection != int)

前两个条件显然是为了捕获超出界限的数据,但我正在寻找一种方法来指定输入需要是一个int。

如果唯一的选择是try catch,请说明,但我希望有更优雅的解决方案。

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。小写\\d匹配数字,添加加号表示连续。所以,

String regex = "\\d+";
String[] arr = { "Tea", "123" };
for (String str : arr) {
    if (str.matches(regex)) {
        System.out.printf("%s is all digits%n", str);
    } else {
        System.out.printf("%s is NOT all digits%n", str);
    }
}

输出

Tea is NOT all digits
123 is all digits

答案 1 :(得分:0)

这是命令行输入吗?如果是这样,您可以使用Scanner类的nextInt方法(https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28%29)。如果它来自Web表单,您的库应该将值转换为整数,在这种情况下,您已经知道它是一个整数,或者它是一个字符串,您可以调用Integer。 parseInt函数(字符串)。这里的文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29

答案 2 :(得分:0)

假设数据是字符串,那么,try / catch是要使用的东西,或者是一些函数来检查提供的数据是否是有效整数,如下所示:

boolean isValidInt(String s) {
  try {
    Integer.parseInt(s);
  } catch (Exception e) {
    return false;
  }
  return true;
}

然后你可以说:

if(!isValidInt(appSelection)) someError();

希望它有所帮助!

答案 3 :(得分:0)

假设这是一个与Java相关的问题,int是一个原语。您所指的操作有一个运算符:instanceof。不幸的是,它不适用于原始数据类型。为了使用它,你必须使用包装类(即Integer)。所以:

int x = 1;
if (x instanceof Integer) { // compilation error }

不幸的是,自动装箱不起作用。你能做的是以下几点:

String value = ???;  // ??? represents some unknown string value.

稍后,您可以尝试将该String值转换为Integer值:

try
{
    Integer x = new Integer(str);
}
catch (NumberFormatException e)
{
    // The exception will be thrown if the string does not represent a numeric value. For example: a34bc
}

如果变量x的实例化成功,它将保存一个数值。由于Java拆箱机制,您将能够通过&#39; x&#39;一些采用原始int的方法。例如:

try
{
    Integer x = new Integer(str);
    int result = addThisValue(x);
}
catch (NumberFormatException e) {// Do something }
...
public int addThisValue(int value) {...}

您将能够安全地将变量x传递给该方法。