所以这基本上就是我想要我的代码所说的,以避免在用户选择"Tea"
而不是使用相应的整数的情况下编译错误。
if(appSelection < 1 || appSelection > appetizersArray.length || appSelection != int)
前两个条件显然是为了捕获超出界限的数据,但我正在寻找一种方法来指定输入需要是一个int。
如果唯一的选择是try catch
,请说明,但我希望有更优雅的解决方案。
答案 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
传递给该方法。