2012-07-02 36 views
5

Ai đó có thể giải thích cho tôi tại sao mã dưới đây cung cấp kết quả này?Số phân tích cú pháp có hậu tố âm

1.2 
null 

Chạy đoạn mã sau:

String positive = "1.2+"; 
String negative = "1.2-"; 
DecimalFormat format = new DecimalFormat("0.0"); 
format.setPositiveSuffix("+"); 
format.setNegativeSuffix("-"); 
format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US)); 
System.out.println(format.parse(positive, new ParsePosition(0))); 
System.out.println(format.parse(negative, new ParsePosition(0))); 

này hoạt động mặc dù, nhưng tôi không thích sự lặp lại của các mô hình:

String positive = "1.2+"; 
String negative = "1.2-"; 
DecimalFormat format = new DecimalFormat("0.0+;0.0-"); 
format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US)); 
System.out.println(format.parse(positive, new ParsePosition(0))); 
System.out.println(format.parse(negative, new ParsePosition(0))); 

là hậu tố không dự định được sử dụng cho phân tích cú pháp?

+0

phân tích cú pháp không được đảm bảo để tiêu thụ toàn bộ chuỗi. Nó sẽ dừng lại khi nó được một nhân vật nó không biết phải làm gì với. –

+0

@PeterLawrey Tôi biết, nhưng tôi nghĩ tôi đã nói với nó phải làm gì khi tôi thiết lập hậu tố? Và tại sao nó xử lý + nhưng không -? –

+0

@PeterLawrey Tôi cũng giả định rằng mã thứ hai là chậm hơn, vì nó sẽ cần phải phân tích cú pháp toàn bộ chuỗi hai lần? –

Trả lời

2

Như quy định trong javadoc:

Các subpattern tiêu cực là không bắt buộc; nếu vắng mặt, thì subpattern tích cực bắt đầu bằng dấu hiệu cục bộ trừ ('-' trong hầu hết các vùng)

Trong dụ của bạn, phân tích cú pháp được chờ đợi "-1.2-", vì vậy bạn phải thêm dòng này:

format.setNegativePrefix(""); 

Chúc bạn một ngày vui vẻ!

+0

Bạn đã thử mã đó chưa? Tôi đã thử nó trước khi đăng bài, đã không làm việc tho –

+0

Đúng, đã thử, và ở đây nó hoạt động (JRE 1.6.0_22) – cporte

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