确定字符串在 Java 中是否为整数
我正在尝试确定字符串数组中的特定项是否为整数。
我正在以形式设置一个中缀表达式,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。实现这一目标的最佳方法是什么?.split(" ")
String
我想我也许能找到一种方法或别的什么,但没有这样的运气。Integer.isInteger(String arg)
我正在尝试确定字符串数组中的特定项是否为整数。
我正在以形式设置一个中缀表达式,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。实现这一目标的最佳方法是什么?.split(" ")
String
我想我也许能找到一种方法或别的什么,但没有这样的运气。Integer.isInteger(String arg)
最幼稚的方法是循环访问 String,并确保所有元素都是给定基数的有效数字。这几乎是尽可能有效的,因为您必须至少查看每个元素一次。我想我们可以根据基数对它进行微优化,但是对于所有意图和目的来说,这都是您可以期望得到的。
public static boolean isInteger(String s) {
return isInteger(s,10);
}
public static boolean isInteger(String s, int radix) {
if(s.isEmpty()) return false;
for(int i = 0; i < s.length(); i++) {
if(i == 0 && s.charAt(i) == '-') {
if(s.length() == 1) return false;
else continue;
}
if(Character.digit(s.charAt(i),radix) < 0) return false;
}
return true;
}
或者,您可以依靠Java库来实现这一点。它不是基于异常的,并且会捕获您能想到的几乎所有错误条件。这将有点昂贵(你必须创建一个扫描仪对象,在一个你不想做的非常紧密的循环中。但它通常不应该太昂贵,因此对于日常操作,它应该非常可靠。
public static boolean isInteger(String s, int radix) {
Scanner sc = new Scanner(s.trim());
if(!sc.hasNextInt(radix)) return false;
// we know it starts with a valid int, now make sure
// there's nothing left!
sc.nextInt(radix);
return !sc.hasNext();
}
如果最佳实践对你来说并不重要,或者你想恶搞做代码审查的人,试试这个大小:
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
} catch(NullPointerException e) {
return false;
}
// only got here if we didn't return false
return true;
}
使用正则表达式更好。
str.matches("-?\\d+");
-? --> negative sign, could have none or one
\\d+ --> one or more digits
如果可以改用,在这里使用是不好的。NumberFormatException
if-statement
如果您不想要前导零,则可以按如下方式使用正则表达式:
str.matches("-?(0|[1-9]\\d*)");