2012-08-15 10 views
25

Tôi nhận được NumberFormatException khi tôi cố gắng phân tích 265,858 bằng Integer.parseInt().Làm cách nào để phân tích cú pháp chuỗi số có chứa dấu phẩy thành một số nguyên trong java?

Có cách nào để phân tích cú pháp thành số nguyên không?

+5

câu hỏi không sạch sẽ, ',' là gì? hàng nghìn hoặc dấu phân cách thập phân? –

+4

Tôi nghĩ rằng đó là ... Có cách nào để phân tích nó thành ** một số nguyên **? – SiB

+1

hoặc là 2 số nguyên trong định dạng csv? 265 và 858? –

Trả lời

57

là dấu phẩy này một tách thập phân hoặc là hai con số này? Trong trường hợp đầu tiên bạn phải cung cấp Locale-NumberFormat lớp có sử dụng dấu phẩy để định thập phân:

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

Điều này dẫn đến 265.858. Nhưng sử dụng Mỹ Locale bạn sẽ nhận được 265858:

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

Đó là bởi vì ở Pháp họ đối xử với dấu phẩy để định thập phân trong khi ở Mỹ - như nhóm (nghìn) tách.

Nếu đây là hai số - String.split() chúng và phân tách hai chuỗi riêng biệt một cách độc lập.

+2

"phân tích cú pháp thành số nguyên" thu hẹp quá nhiều cách giải thích :) –

+3

Tùy chọn thứ ba: đó là dấu tách nhóm. –

+0

Có: một số nguyên, dấu tách hàng nghìn. –

2

Một lựa chọn sẽ là tước dấu phẩy:

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

Giải pháp đơn giản và nhanh hơn: 'thay thế' thay vì' replaceAll'. –

0

Hãy thử điều này:

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

EDIT: nếu bạn muốn nó làm tròn đến số nguyên gần nhất:

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

Điều đó cho phép '265' – Cratylus

+1

Điều đó sẽ cho 265, anh ta không muốn nó làm tròn hoặc những gì như vậy – SpiXel

+0

Nhưng số đó là '265858' hoặc' 265.858' – Cratylus

15

Bạn có thể xóa , trước khi phân tích cú pháp thành số:

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

Điều đầu tiên mà nhấp chuột với tôi, giả sử đây là một số duy nhất, là ...

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

Nếu nó là một trong số & bạn muốn loại bỏ dải phân cách, NumberFormat sẽ trả về một số cho bạn. Chỉ cần đảm bảo sử dụng đúng Locale khi sử dụng phương thức getNumberInstance.

Ví dụ: một số Locales hoán đổi dấu phẩy và dấu thập phân cho những gì bạn có thể sử dụng.

Sau đó, chỉ cần sử dụng phương thức intValue để trả lại số nguyên. Bạn sẽ phải bọc toàn bộ thứ trong một khối try/catch, để tính đến Parse Exceptions.

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