2012-05-21 21 views
9

Integer.parseInt("-1000"); trả về -1000 làm đầu ra.Integer.parseint trong Java, ngoại lệ khi '+' xuất hiện trước tiên

Integer.parseInt("+500"); ném ngoại lệ.

Làm cách nào để tôi có thể nhận ra số dương với biểu tượng "+" trước chúng mà không phải cắt biểu tượng?

+1

vấn đề gì với cắt tỉa biểu tượng? –

+2

Bạn không cần phải làm như vậy? –

+0

Tại sao không sử dụng regex để phân tích cú pháp +, và rời khỏi -? –

Trả lời

10

Hãy thử DecimalFormat như với mô hình "+#;-#". Nó sẽ xử lý phân tích cú pháp đã ký rõ ràng.Sụp đổ của mô hình:

  • Phần thứ nhất (trước ;) là mô hình tích cực, nó phải bắt đầu với một + char
  • Phần thứ hai là tiêu cực và phải bắt đầu với một char -

Ví dụ:

DecimalFormat df = new DecimalFormat("+#;-#"); 
System.out.println(df.parse("+500")); 
System.out.println(df.parse("-500")); 

Đầu ra:

500 
-500 
+0

Dường như không thể nhận được một DecimalFormat có thể phân tích cú pháp "+1" thành 1, "-1" là -1 và "0" là 0. – Ben

7

Một lựa chọn là sử dụng Java 7 ... giả định rằng hành xử as documented:

phân tích các tham số chuỗi như một số nguyên thập phân có chữ ký. Các ký tự trong chuỗi phải là số thập phân, ngoại trừ ký tự đầu tiên có thể là dấu trừ ASCII '-' ('\ u002D') để biểu thị giá trị âm hoặc dấu cộng ASCII '+' ('\ u002B') để chỉ ra giá trị dương.

Dường như đây là một tính năng mới được giới thiệu trong Java 7. Tài liệu JDK 6 chỉ cho biết rằng - được xử lý.

6

Phương pháp này là hành xử như mô tả trong tài liệu hướng dẫn:

Các nhân vật trong chuỗi tất cả phải số thập phân chữ số, ngoại trừ các ký tự đầu tiên có thể là một dấu hiệu ASCII trừ '-' ('\ u002D') để chỉ ra giá trị âm.

Bạn cần phải bỏ qua ký tự đầu tiên nếu nó là một + để làm phân tích một cách chính xác:

if (s.charAt(0) == '+') s = s.substring(1); 
int val= Integer.parseInt(s); 
+2

OP nói * "mà không cần phải cắt biểu tượng?" * – aioobe

+1

Có nghĩa là tôi không phải xử lý ký hiệu "+" một cách rõ ràng. Bất kỳ cách nào cảm ơn cho trả lời. Tôi nghĩ rằng câu trả lời định dạng thập phân sẽ phù hợp. – Achilles

+1

@Achilles Yeah, 'DecimalFormat' là một câu trả lời hay. – dasblinkenlight

0

public static int parseInt (String s) ném NumberFormatException

phân tích các chuỗi đối số dưới dạng số nguyên thập phân đã ký. Các ký tự trong chuỗi phải là số thập phân, ngoại trừ ký tự đầu tiên có thể là dấu trừ ASCII '-' ('\ u002D') để biểu thị giá trị âm. Giá trị số nguyên kết quả được trả về, chính xác như đối số và cơ số 10 được cho làm đối số cho phương thức parseInt (java.lang.String, int).

Javadoc

1

Tôi đang sử dụng Java 7, và Integer.parseInt("+500"); không được ném bất kỳ ngoại lệ.

Các nhân vật trong chuỗi tất cả phải số thập phân chữ số, ngoại trừ việc ký tự đầu tiên có thể là một dấu hiệu ASCII trừ '-' ('\u002D') để biểu thị giá trị âm hoặc một ASCII dấu cộng '+' ('\u002B') để chỉ ra một giá trị tích cực.

Java 7 documentation for Integer.parseInt(String)

+0

Tôi đang sử dụng java 6! – Achilles

+0

trong trường hợp java 6 chỉ "-" được xử lý. để bạn có thể thay đổi jre hoặc thay đổi mã ur. –

0

Việc thực hiện đã thay đổi từ java 6 đến 7. Intger.parseInt ("+ 500") dùng để Exception đến java 6, nhưng hoạt động hoàn toàn tốt đẹp với java 7

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