2015-02-06 38 views
1

我正在玩Java中的.substring方法,並遇到了一個我不明白的錯誤。通過調用.substring和空格,Java

int lastWhitespaceIndex = forecast.lastIndexOf(" "); 
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1)); 

但是,如果我改變第二行

int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex)); 

我的程序崩潰

String forecast = "Sat, 7 Feb - Snow - -8/-13" 

我可以分離的溫度數據:如果我有一個表示預測的字符串。有沒有關於不允許字符串以我不知道的空白開始的規則?

回答

1

Integer.parseInt()的文件中明確指出:

字符串中的字符必須都是十進制數字,除非第一個字符是ASCII字符的減號「 - 」(「\ u002D」)爲指示負值或ASCII加號「+」('\ u002B')表示正值。

所以,沒有空白開始。

0

原因是子字符串將返回-8/-13,並且該斜槓不是diget,因此這將失敗。用斜線分割它,你就完成了。

int lastWhitespaceIndex = forecast.lastIndexOf(" "); 
int lastSlashIndex = forecast.lastIndexOf("/"); 
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1, lastSlashIndex)); 
0

在我的測試中都認可faild。如果您使用Integer.parse(value),該值只能包含一個數字。如果沒有,你會得到一個NumberFormatException

公共靜態INT parseInt函數(String s)將 拋出NumberFormatException的 將字符串參數作爲有符號的十進制整數。字符串中的字符必須全部爲十進制數字,但第一個字符可能是ASCII減號' - '('\ u002D')以指示負值或ASCII加號'+'('\ u002B')。表示一個正值。返回結果整數值,就像參數和基數10作爲parseInt(java.lang.String,int)方法的參數一樣。

參數:s - 包含INT表示一個待分析的字符串

返回:十進制參數表示的整數值。 拋出:NumberFormatException - 如果該字符串不包含 可分析整數。