2012-08-15 52 views
25

我收到NumberFormatException,當我嘗試用Integer.parseInt()解析265,858。如何將包含逗號的數字字符串解析爲java中的整數?

有沒有什麼辦法將它解析爲一個整數?

+5

問題並不清楚,'''是什麼?數千或十進制分隔符? – 2012-08-15 16:44:06

+4

我認爲這是...有沒有什麼辦法可以將它解析成** an **整數? – SiB 2012-08-15 16:46:28

+1

還是2 csv格式的整數? 265和858? – 2012-08-15 16:47:41

回答

57

這是逗號小數點分隔符或者是這兩個數字?在第一種情況下,你必須提供LocaleNumberFormat類使用逗號作爲小數點分隔符:

NumberFormat.getNumberInstance(Locale.FRANCE).parse("265,858") 

這導致265.858。但是,使用美國區域,那麼你會得到265858

NumberFormat.getNumberInstance(java.util.Locale.US).parse("265,858") 

這是因爲在法國他們對待逗號作爲小數點分隔符,而在美國 - 作爲分組(千)分隔符。

如果它們是兩個數字 - String.split()它們並獨立解析兩個獨立的字符串。

+2

「將其解析爲一個整數」幾乎縮小了解釋:) – 2012-08-15 16:46:12

+3

第三個選項:它是一個分組分隔符。 – 2012-08-15 16:46:39

+0

是:一個整數,千位分隔符。 – 2012-08-15 16:47:05

2

一種辦法是剝去逗號:

"265,858".replaceAll(",",""); 
+0

更簡單快捷的解決方案:'replace'代替'replaceAll'。 – 2012-08-15 16:49:17

0

試試這個:

String x = "265,858 "; 
    x = x.split(",")[0]; 
    System.out.println(Integer.parseInt(x)); 

編輯: 如果你希望它四捨五入到最接近的整數:

String x = "265,858 "; 
    x = x.replaceAll(",","."); 
    System.out.println(Math.round(Double.parseDouble(x))); 
+0

這給出了'265' – Cratylus 2012-08-15 16:44:09

+1

這應該給265,他不希望它四捨五入或者如此以來 – SpiXel 2012-08-15 16:45:16

+0

但是數字是'265858'或'265.858' – Cratylus 2012-08-15 16:46:08

15

在將其解析爲int之前,您可以刪除, 01:

int i = Integer.parseInt(myNumberString.replaceAll(",", "")); 
1

其點擊對我來說,假設這是一個單一的數字,是第一件事...

String number = "265,858"; 
number.replaceAll(",",""); 
Integer num = Integer.parseInt(number); 
9

如果它是一個&要刪除分隔號,NumberFormat將一些回報給你。使用getNumberInstance方法時,請確保使用正確的區域設置。

例如,某些區域設置將逗號和小數點替換爲您可能習慣的值。

然後只需使用intValue方法返回一個整數。儘管如此,你必須將所有東西包裝在try/catch塊中,以解釋Parse Exceptions。

try { 
    NumberFormat ukFormat = NumberFormat.getNumberInstance(Locale.UK); 
    ukFormat.parse("265,858").intValue(); 
} catch(ParseException e) { 
    //Handle exception 
} 
相關問題