2010-08-18 32 views
7

Tôi đã viết một chức năng để chuyển đổi chuỗi để nguyênKhông thể chuyển đổi String để Integer trong Java

if (data != null) 
    { 
     int theValue = Integer.parseInt(data.trim(), 16); 
     return theValue; 
    } 
    else 
     return null; 

Tôi có một chuỗi đó là 6042076399 và nó đã cho tôi lỗi:

Exception in thread "main" java.lang.NumberFormatException: For input string: "6042076399" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
    at java.lang.Integer.parseInt(Integer.java:461) 

Đây có phải là không cách chính xác để chuyển đổi chuỗi thành số nguyên?

+0

Lưu ý rằng bằng cách chỉ định 16 làm tham số thứ hai cho 'parseInt', bạn đang phân tích cú pháp chuỗi dưới dạng số thập lục phân. – Jesper

Trả lời

7

Dưới đây là cách tôi muốn làm điều đó:

Chỉnh sửa (2015/08/04):

Như đã đề cập trong các bình luận dưới đây, điều này được thực sự làm tốt hơn như thế này:

String numStr = "123"; 
int num = Integer.parseInt(numStr); 
+0

Trừ khi mọi thứ đã thay đổi, 'Integer.parseInt()' là phương thức ưa thích vì nó sẽ lưu các giá trị thường được sử dụng để cải thiện hiệu suất. Tạo một Integer mới sẽ luôn tạo một đối tượng Integer mới. Tuy nhiên, đây là tiền Java 5 - Tôi sẽ không ngạc nhiên nếu cả hai đều làm điều tương tự. –

2

Chuỗi đó lớn hơn Integer.MAX_VALUE. Bạn không thể phân tích cú pháp thứ gì đó nằm ngoài phạm vi số nguyên. (họ đi tới 2^31-1, tôi tin).

4

Đó là phương pháp chính xác nhưng giá trị của bạn lớn hơn kích thước tối đa là int.

Kích thước tối đa là int có thể giữ là 2 - 1 hoặc 2.147,483,647. Giá trị của bạn là 6.042.076.399. Bạn nên xem xét lưu trữ nó như là một long nếu bạn muốn có một kiểu nguyên thủy. Giá trị lớn nhất của một cái dài lớn hơn đáng kể - 2 - 1. Một tùy chọn khác có thể là BigInteger.

8

An Integer không thể giữ giá trị đó. 6042076399 (413424640921 in decimal) lớn hơn 2147483647, số nguyên tối đa có thể giữ.

Thử sử dụng Long.parseLong.

+1

Anh ấy đang sử dụng các kiểu nguyên thủy. Tôi sẽ giới thiệu một 'long' trước một' Long'. Tôi thậm chí còn có thể giới thiệu một 'BigInteger' trước một' Long', mặc dù tôi không hoàn toàn chắc chắn về điều đó. –

1

Ngoài những gì người khác trả lời, nếu bạn có chuỗi hơn 8 chữ số thập lục phân (nhưng tối đa 16 chữ số thập lục phân), bạn có thể chuyển đổi thành dài bằng Long.parseLong() thay vì sử dụng Integer.parseInt().

Các vấn đề liên quan