我正在使用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));
我的程序崩溃了。是否有一些关于不允许字符串以我不知道的空格开头的规则?
答案 0 :(得分:1)
Integer.parseInt()的文件明确指出:
字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。
所以,没有空格开始。
答案 1 :(得分:0)
原因是子字符串将返回-8/-13
并且斜杠不是diget,因此这将失败。将它拆分为斜线,你就完成了。
int lastWhitespaceIndex = forecast.lastIndexOf(" ");
int lastSlashIndex = forecast.lastIndexOf("/");
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1, lastSlashIndex));
答案 2 :(得分:0)
在我的测试中,两个方法都有效。如果您使用Integer.parse(value),则该值只能包含一个数字。如果没有,你会得到一个NumberFormatException
。
public static int parseInt(String s) 抛出NumberFormatException 将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。
参数:s - 包含要解析的int表示的String
返回:十进制参数表示的整数值。 抛出:NumberFormatException - 如果字符串不包含 可解析的整数。