我寫了一些採用格式爲「1 day hh:mm:ss」的字符串的代碼。使用字符串標記器,我試圖將字符串分成不同的關注部分,即將1天轉換爲86400秒,將小時轉換爲分鐘等等。我遇到了秒數錯誤,並用我的代碼返回。我無法弄清楚問題出在哪裏。我在週末考慮了這個問題,作爲最後的決定,我決定向更廣泛的社區徵求更正的幫助,並提出更好的改進這些代碼的建議。Java中的最終字符串Tokenizer錯誤
目標:讀入格式爲「X days hh:mm:ss」的字符串並將其轉換爲秒。代碼如下所示。
這個錯誤我得到如下:
"java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at ReadIn.parseTime(ReadIn.java:110)
at ReadIn.main(ReadIn.java:60)"
我收集它是與無法解析最終詮釋(「SS」)的format.I'm的值不當然,爲什麼會這樣,並且希望澄清一下我做錯了什麼。
我知道這段代碼的某些部分是多餘的,所以我完全開放,歡迎所有建設性的批評。
在此先感謝!
public static int parseTime(String s) {
int days = 0;
int hours = 0;
int minutes = 0;
int seconds = 0;
try{
StringTokenizer st = new StringTokenizer(s,": ");
if(s.contains("day")){
days = Integer.parseInt(st.nextToken());
String throwAway = st.nextToken();// day
throwAway = throwAway.substring(0, throwAway.lastIndexOf(throwAway));
hours = Integer.parseInt(st.nextToken());
throwAway = st.nextToken();//hours
throwAway = throwAway.substring(0, throwAway.lastIndexOf(throwAway));
minutes = Integer.parseInt(st.nextToken());
throwAway = throwAway.substring(0, throwAway.lastIndexOf(throwAway));
seconds = Integer.parseInt(st.nextToken());
throwAway = st.nextToken();
}
}catch(NoSuchElementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(NumberFormatException e){
e.printStackTrace();
}
return (days*86400 + hours*3600 + minutes*60 + seconds*1);
}
你有錯誤...?什麼是錯誤? – Bart
java.util.NoSuchElementException at ReadIn.main(ReadIn.java:60) - ReadIn.parseTime(ReadIn.java:110) (ReadIn.java:60) - 剛編輯過的爲清晰起見。 –
沒有下一個標記,你對異常有什麼不瞭解? – 2014-01-20 20:25:13