.substring和whitespace,Java

时间:2015-02-06 06:29:26

标签: java string substring

我正在使用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));

我的程序崩溃了。是否有一些关于不允许字符串以我不知道的空格开头的规则?

3 个答案:

答案 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 - 如果字符串不包含   可解析的整数。

相关问题