2012-05-31 18 views

Trả lời

29

Hãy thử isNumber(String) từ org.apache.commons.lang.math.NumberUtils.

Kiểm tra xem chuỗi [là] có phải là số Java hợp lệ hay không.

Số hợp lệ bao gồm hệ thập lục phân được đánh dấu bằng dấu 0x, ký hiệu khoa học và số được đánh dấu bằng loại loại (ví dụ: 123L).

Null và trống Chuỗi sẽ trả về false.

CẬP NHẬT -

isNumber(String) hiện đang bị phản đối. Sử dụng isCreatable(String) để thay thế.

Cảm ơn bạn eav vì đã chỉ ra.

+1

một số chuỗi như "5.f" hoặc "5.d" sẽ đăng ký dưới dạng số (tôi đoán có việc cần làm với ký hiệu kép hoặc ký hiệu nổi), nhưng các số khác như "5.x" thì không. – dstrube

+0

Điều này là tốt hơn một chút. Thật không may: '** + 2 **' hóa ra là NOT isNumber(). – will

+2

May mắn thay, isNumber ("** - 2 **") cho _true_. – will

1

cách khác bạn có thể kiểm tra xem nếu có nhân vật phù hợp với một chữ số không như thế này ..

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]")) sau đó bạn biết có những thứ trong đó mà không phải là 0-9 và/hoặc.

Dưới đây là tương đương với javascript (sửa đổi các chuỗi thử nghiệm) ...

http://jsfiddle.net/LzZE6/

+2

Regex sẽ không tìm thấy (và từ chối) một chuỗi có nhiều dấu thập phân, chẳng hạn như "123.9.1" – bdares

+0

Tôi nghĩ bạn có nghĩa là "[^ \\ D \\.]" ... nếu không bạn sẽ có chuỗi ký tự thoát xấu. –

+0

@tim bender, vâng xin lỗi ... đó là lỗi đánh máy là vốn D –

5

Đây không phải là chính xác trong commons.lang, nhưng nó sẽ làm việc.

try { 
    double d = Double.parseDouble(string); 
    // string is a number 
} catch (NumberFormatException e) { 
    // string is not a number 
} 
+1

Giải pháp này giả định bạn chỉ sử dụng số cơ sở-10, trong phạm vi tăng gấp đôi. Mà không phải là một giả định xấu hầu hết thời gian, và giải pháp này không tạo ra bất kỳ phụ thuộc mới. +1 – bdares

2

NumberUtils.isNumber không được dùng nữa.

bạn nên sử dụng

NumberUtils.isCreatable 

hoặc

NumberUtils.isParsable 

Tất cả đều hỗ trợ một giá trị thập phân điểm:

  • NumberUtils.isCreatable hỗ trợ thập lục phân, số bát phân, ký hiệu khoa học và số đánh dấu với một loại vòng loại (ví dụ: 123L). Giá trị bát phân không hợp lệ sẽ trả về false (ví dụ: 09). Nếu bạn muốn nhận được giá trị của nó, bạn nên sử dụng NumberUtils.createNumber.
  • NumberUtils.isParsable chỉ hỗ trợ 0~9 và dấu thập phân (.), bất kỳ ký tự nào khác (ví dụ: khoảng trống hoặc bất kỳ ký tự nào khác) sẽ trả về false.

Nhân tiện, triển khai thực hiện của StringUtils.isNumberic có một số khác biệt giữa commons-lang và commons-lang3. Trong commons-lang, StringUtils.isNumberic("")true.Nhưng trong commons-lang3, StringUtils.isNumberic("")false. Bạn có thể nhận thêm thông tin bằng tài liệu.

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