2010-11-01 70 views
2

我必須將字符串的前2個字符轉換爲int。 問題是,當一個字符串09,它在1被轉換開始,這一年看起來像2001年和2009年不將字符串轉換爲以0開頭的整數

這是我,也許有更好的方法...

String s = longString.substring(0, 2); // 09asdasdas 
int jahr = Integer.parseInt(s); 
+1

它被轉換爲9 – Bozho 2010-11-01 13:20:19

+0

我沒有得到那個錯誤。試試這個例子: public class Test { \t public static void main(String [] args){ \t \t String longString =「09asdasdas」; \t \t String s = longString.substring(0,2); // 09asdasdas \t int jahr = Integer.parseInt(s); \t System.out.println(jahr); \t} } – 2010-11-01 13:25:18

+2

您的問題沒有意義,我無法重現所假設的錯誤。請提供一個更完整的例子,包括你認爲輸出_應該是什麼。 – Alnitak 2010-11-01 13:26:27

回答

-2

最好的辦法是檢查第一個字符,如果是0,修剪它,然後發送到Integrer.parseInt() - 如果我沒有記錯,Integer.parseInt不喜歡一些因素(前導0,其中包括)我只是刪除它。

+2

我不相信'parseInt'對前導零有任何問題。 – aioobe 2010-11-01 13:27:58

2

...並在今年看起來像2001年和2009年不...

不能完全確定我明白你的問題,但它可能取決於你如何打印。下面的代碼打印0領先,如果必要的:

String longString = "09asdasdas"; 
String s = longString.substring(0, 2); 
int jahr = Integer.parseInt(s); 
System.out.printf("Year 20%02d.", jahr); // prints "2009" 

在這個片段中

String longString = "59asdasdas";   // <-- Changed to "59....." 
String s = longString.substring(0, 2); 
int jahr = Integer.parseInt(s); 
System.out.printf("Year 20%02d.", jahr); // prints "2059" 

比較(這裏是一個ideone demo

+0

Downvoter,謹慎解釋? – aioobe 2010-11-01 13:28:54

1

有沒有需要擺脫的0領先,但如果你想,這裏有一種方法來做到這一點...

這裏是如何擺脫領先的0,如果有的話,它將適用於任何數字從「00」到「99」(你的闕stion和substring(0,2)似乎暗示):

Integer.parseInt(s.substring(0, 2).replaceAll("^[0]", "")); 
+2

並提示所有的無知*「omg你正在使用正則表達式,現在你有兩個問題」*;) – SyntaxT3rr0r 2010-11-01 13:26:31

+0

''''''''''周圍有什麼原因? – aioobe 2010-11-01 13:41:40

+0

@aioobe:哦,這只是一種習慣,當我使用的角色對正則表達式解析器有一個保留意義時,我不會遇到問題。說* replaceAll(「^ $」,「」)*而不是「^ [$]」。保存我的**很多次,我傾向於使用它很多(尤其有用的,當你編程創建正則表達式與字符匹配,事先不知道,我已經從Bash腳本中完成)。這真的只是一種習慣,它不會受到傷害(至少我不這麼認爲)。 – SyntaxT3rr0r 2010-11-01 22:01:46

0

您對小數運算使用前導零。不好的做法,因爲它可以被解釋爲一個八進制數。你也提到了幾年。如果你想操縱日期,那麼不要使用整數。使用類似Joda time的圖書館。我假設你需要這樣的東西:

String string = "09asdasdas"; 
String dateString = string.substring(0, 2); 
DateTimeFormatter formatter = DateTimeFormat.forPattern("YY"); 
DateTime date = formatter.parseDateTime(dateString); 
System.out.println(date);