我在Java中玩.substring方法,遇到了一个我不明白的错误。如果我有一个字符串表示一个预测:
String forecast = "Sat, 7 Feb - Snow - -8/-13"我可以通过调用
int lastWhitespaceIndex = forecast.lastIndexOf(" ");
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1));但是,如果我将第二行更改为
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex));我的程序崩溃了。是否有关于不允许字符串以我不知道的空格开始的规则?
发布于 2015-02-06 06:32:12
Integer.parseInt()的文档明确指出:
字符串中的字符都必须是十进制数字,但第一个字符可能是ASCII减号'-‘('\u002D')表示负值,或ASCII加符号'+’('\u002B')表示正值。
所以,没有空格可以开始。
发布于 2015-02-06 06:33:24
原因是子字符串将返回-8/-13,而斜杠不是diget,因此这将失败。在斜杠上分头,你就完蛋了。
int lastWhitespaceIndex = forecast.lastIndexOf(" ");
int lastSlashIndex = forecast.lastIndexOf("/");
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1, lastSlashIndex));发布于 2015-02-06 06:33:54
在我的测试中,两种方法都失败了。如果使用Integer.parse(价值),则该值只能包含一个数字。如果没有,你会得到一个NumberFormatException。
公共静态int parseInt(String s)抛出NumberFormatException将字符串参数解析为有符号的十进制整数。字符串中的字符都必须是十进制数字,但第一个字符可能是ASCII减号'-‘('\u002D')表示负值,或ASCII加符号'+’('\u002B')表示正值。返回得到的整数值,就好像参数和基数10是作为parseInt(java.lang.String,int)方法的参数一样。 参数:s-包含要解析的int表示的字符串。 返回:以十进制为单位的参数表示的整数值。抛出: NumberFormatException -如果字符串不包含可解析整数。
https://stackoverflow.com/questions/28359816
复制相似问题