我试图确定字符串数组中的特定项是否为整数
我正在.split(“””以String的形式使用中缀表达式,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。实现这一目标的最佳方式是什么
我想我可能能找到一个Integer.isInteger(String arg)方法或其他什么,但没有这样的运气
最简单的方法是迭代字符串,确保所有元素都是给定基数的有效数字。这是可能达到的效率,因为您必须至少查看每个元素一次。我想我们可以基于基数对其进行微优化,但无论出于何种目的,这都是您所期望的
公共静态布尔isInteger(字符串s){
返回isInteger(s,10);
}
公共静态布尔isInteger(字符串s,整数基数){
如果(s.isEmpty())返回false;
对于(int i=0;i<;s.length();i++){
如果(i==0&;s.charAt(i)=’-‘){
如果(s.length()==1)返回false;
否则继续;
}
if(字符数字(s.charAt(i),基数)<;0)返回false;
}
返回true;
}
或者,您可以依赖Java库来实现这一点。它不是基于异常的,并且将捕获您能想到的几乎所有错误条件。它会稍微贵一点(你必须创建一个扫描器对象,这是在一个非常紧密的循环中你不想做的。但是它通常不会太贵,所以对于日常操作来说,它应该是非常可靠的
公共静态布尔isInteger(字符串s,整数基数){
扫描仪sc=新扫描仪(s.trim());
如果(!sc.hasNextInt(基数))返回false;
//我们知道它以一个有效的int开头,现在确保
//什么都没有了!
sc.nextInt(基数);
return!sc.hasNext();
}
如果最佳实践对您来说无关紧要,或者您想对代码审阅者施加压力,请尝试以下尺寸:
公共静态布尔isInteger(字符串s){
试试{
整数.parseInt(s);
}捕获(数字格式){
返回false;
}捕获(NullPointerException e){
返回false;
}
//只有在我们没有返回false的情况下才能到达这里
返回true;
}