我刚刚遇到了这个小问题,我想让其他人对此发表意见
我在徘徊,将字符串转换为整数的最佳解决方案是什么
(int)(float)Float.valueOf(s)
或
Float.valueOf(s).toInt()
s 是从文本字段输入的字符串,所以我不能保证它一定是 int
我的直觉是双重铸造是丑陋的,应该避免
您的意见?
您的要求不清楚:
-
如果您期望使用整数并且不想允许用户输入带有小数点的数字,只需使用
Integer.valueOf(String)
或Integer.parseInt(String)
并捕获NumberFormatException
。 -
如果要允许带小数点的数字,请使用
Float.valueOf(String)
或Float.parseFloat(String)
。-
如果只想将
float
截断为int
,则Float.intValue()
或两个强制转换是等效的。 (intValue
的javadoc明确指出了这一点。 -
如果要舍入到最接近的
int
,请使用Math.round()
而不是强制转换。
-
无论您采取什么方法,您都应该抓住NumberFormatException
因为用户可能会输入不是有效以 10 为底的数字(带或不带小数点)的垃圾......或超出数字类型的界限。
(我想您可以在尝试转换之前使用正则表达式或其他东西来检查字符串,但让异常发生并处理它更简单。 在此用例中,异常效率问题不太可能成为实际问题。
关于你最初的问题,intValue()
是否比两个演员更好:这是一个风格问题。 这两种方法做同样的事情...根据Javadoc的说法。 一个可能比另一个稍微更有效率,但是:
- 这不应该成为您的用例的问题,并且
- 确定的唯一方法是在您的执行平台上分析这两种替代方案......坦率地说,这不值得付出努力。
使用 Integer.valueOf(..)
并捕获NumberFormatException
(如果字符串无法解析为整数)。
Integer.parseInt(string) 是最好的
int x = Integer.parseInt(s);
在调用它之前,最好检查字符串是否为 int。
正如其他人指出的那样,这只是风格问题而不是性能问题......但是,如果您担心性能,则应使用正则表达式通过JavaScript验证浏览器中的文本字段数据
^[0-9]*$
这将只允许将整数提交到后端代码,从而通过避免一次网络行程来提高性能。您仍然应该在后端验证数据,为此您可以使用
Integer.parseInt(String s) throws NumberFormatException