2012-03-07 37 views
8

Có cách nào để truyền một số không thành số nguyên không. Các null thực sự là một String, mà tôi đang đi qua trong lớp dịch vụ của tôi chấp nhận nó như là một Integer. Vì vậy, bất cứ khi nào tôi cố gắng để đúc một chuỗi null để Integer, nó ném cho tôi một ngoại lệ. Nhưng tôi phải bỏ null vào Integer.Truyền một chuỗi Null vào số nguyên

Cảm ơn

+1

được bạn sử dụng 'Integer.parseInt() 'hoặc chỉ cần đúc? – Jon

+4

Bạn có thể cung cấp một ví dụ đơn giản về mã không?'null' chứa tất cả các kiểu trong Java, vì vậy một" String "' null' nên được đúc thành một "Integer" 'null' mà không có vấn đề gì. – oconnor0

+0

bạn có thể cho chúng tôi thấy các dòng mã bạn đang sử dụng không? – aldrin

Trả lời

20

Bạn không thể cast từ String để Integer. Tuy nhiên, nếu bạn đang cố gắng để chuyển đổi chuỗi thành số nguyên và nếu bạn phải cung cấp một thực hiện để xử lý null Strings, hãy nhìn vào đoạn mã này:

String str = "..."; 
// suppose str becomes null after some operation(s). 
int number = 0; 
try 
{ 
    if(str != null) 
     number = Integer.parseInt(str); 
} 
catch (NumberFormatException e) 
{ 
    number = 0; 
} 
+2

Bắt 'Ngoại lệ' thường không phải là một ý tưởng tuyệt vời; tốt hơn để nắm bắt 'NumberFormatException' và' NullPointerException' riêng lẻ. –

+1

@CraigRinger bạn đã đúng! tôi đã thay đổi mã của mình cho phù hợp. cảm ơn cho bình luận hữu ích :) – Juvanis

5
String s= ""; 
int i=0; 
i=Integer.parseInt(s+0); 
System.out.println(i); 

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

+0

Điều này thật tuyệt vời! – tsig

+0

này phải là 'int.Parse (0 + s);' không phải là cách khác. Nó sẽ làm việc bất kể khi 's' là một chuỗi rỗng, nhưng nếu' s' là nói ... 11 bạn sẽ nhận được 110 với cách tiếp cận hiện tại. – cogumel0

2

gì về điều này?

private static void castTest() { 
    System.out.println(getInteger(null)); 
    System.out.println(getInteger("003")); 
    int a = getInteger("55"); 
    System.out.println(a); 
} 

private static Integer getInteger(String str) { 
    if (str == null) { 
     return new Integer(0); 
    } else { 
     return Integer.parseInt(str); 
    } 
} 
3

Bạn không thể truyền từ chuỗi này sang số nguyên khác.
Loại dữ liệu Java có hai loại: nguyên thủytham chiếu. Các loại nguyên thủy là: byte, ngắn, int, dài, char, float, double. Các loại tham chiếu là: lớp, giao diện, mảng.
byte -> ngắn -> int -> long -> float -> double. được cho phép, Hoặc Việc đúc có thể thuộc loại riêng của nó hoặc với một trong các loại hoặc giao diện lớp con hoặc siêu lớp của nó.
Vì vậy, đây là một ví dụ. chức năng có một cái nhìn

public int getInteger(String no) { 
    if (no != null) { 
     return Integer.parseInt(no); //convert your string into integer 
    } else { 
     return 0; // or what you want to return if string is Null 
    } 
} 
-1

Nếu bạn chắc chắn bạn chỉ phải xử lý null,

int i=0; 
i=(str==null?i:Integer.parseInt(str)); 
System.out.println(i); 

cho các chuỗi số nguyên không nó sẽ ném ngoại lệ NumberFormat

7

Nếu bạn đang sử dụng apache commons, có một phương thức trợ giúp thực hiện thủ thuật:

NumberUtils.createInteger(myString)

Như đã nói trong documentation:

"chuyển đổi một String đến một Integer, xử lý hex và bát phân ký hiệu; trả về null nếu chuỗi là null; ném NumberFormatException nếu không thể chuyển đổi giá trị.

+1

Công việc này có phù hợp với bạn không? Tôi đã thử nó trên một chuỗi null và nó đã ném một NullPointerException ... –

+0

Nó làm việc cho tôi. Bạn có chắc chắn NumberUtils của bạn là từ commache commache và không phải là một thư viện? –

+0

Nhưng bạn nên biết rằng phương thức này không gọi 'Integer # parseInt()/valueOf()' nhưng 'Integer # decode()' thay vào đó! – d56

0

Hãy thử dưới đây code:application sẽ trở lại 0 nếu chuỗi là null nếu không nó sẽ phân tích chuỗi để int nếu chuỗi có chứa một số đơn độc ..

Code:

(str.equals("null")?0:Integer.parseInt(str)) 
Các vấn đề liên quan