我通常使用以下习惯来检查String是否可以转换为整数.
public boolean isInteger( String input ) {
try {
Integer.parseInt( input );
return true;
}
catch( Exception e ) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
它只是我,还是看起来有点hackish?什么是更好的方式?
看看我的回答(基于CodingWithSpike的早期答案的基准),看看为什么我改变了我的立场并接受了Jonas Klemming对这个问题的回答.我认为这个原始代码将被大多数人使用,因为它实现起来更快,更易于维护,但是当提供非整数数据时,它会慢一个数量级.
是否有一种本机方式(最好不要实现自己的方法)来检查字符串是否可解析Double.parseDouble()?
尝试使用无用的东西只是为了查看此代码是否抛出特定异常是一种好方法吗?
我想在抛出异常时做一些事情,否则什么也没做.
try {
new BigDecimal("some string"); // This do nothing because the instance is ignored
} catch (NumberFormatException e) {
return false; // OK, the string wasn't a well-formed decimal
}
return true;
Run Code Online (Sandbox Code Playgroud)
要测试的前提条件太多,构造函数BigDecimal()总是检查它们,所以这似乎是最简单的方法.
什么是处理浮点数的好正则表达式(即像Java的Float)
答案必须符合以下目标:
1) 1.
2) .2
3) 3.14
4) 5e6
5) 5e-6
6) 5E+6
7) 7.e8
8) 9.0E-10
9) .11e12
Run Code Online (Sandbox Code Playgroud)
总之,它应该
对于那些想知道的人,是的,这是一个家庭作业问题.我们在编译器的CS课程中收到了这个作业.我已经把我的答案交给了班级,并将其作为这个问题的答案发布.
[Epilogue]我的解决方案没有得到充分的信任,因为它没有处理小数点左边的超过1位数.赋值确实提到了处理Java浮点数,即使这些示例都没有小数点左边的1位数.我会在自己的帖子中发布已接受的答案.
我需要一个正则表达式来获取可以的数值
111.111,11
111,111.11
111,111
Run Code Online (Sandbox Code Playgroud)
并分隔整数和小数部分,以便我可以使用正确的语法存储在DB中
我尝试([0-9]{1,3}[,.]?)+([,.][0-9]{2})?没有成功,因为它没有检测到第二部分:(
结果应如下所示:
111.111,11 -> $1 = 111111; $2 = 11
Run Code Online (Sandbox Code Playgroud)