2013-07-10 30 views
42

Tôi đã lưu trữ một số thư trong một gói tài nguyên. Tôi đang cố gắng định dạng các thông báo này như sau.Định dạng thư bằng cách sử dụng MessageFormat.format() trong Java

import java.text.MessageFormat; 

String text = MessageFormat.format("You're about to delete {0} rows.", 5); 
System.out.println(text); 

Giả sử thông số đầu tiên là thông điệp thực được lưu trữ trong tệp thuộc tính được truy xuất bằng cách nào đó.

Tham số thứ hai tức là 5 là giá trị động và phải được đặt trong trình giữ chỗ {0} không xảy ra. Bản in tiếp theo,

Bạn sắp xóa {0} hàng.

Trình giữ chỗ không được thay thế bằng thông số thực tế.


Đây là dấu nháy đơn tại đây - You're. Tôi đã cố gắng để thoát khỏi nó như bình thường như You\\'re mặc dù nó không hoạt động. Những thay đổi nào cần thiết để làm cho nó hoạt động?

Trả lời

77

Thêm thêm một dấu nháy đơn ' đến MessageFormat mẫu String để đảm bảo các nhân vật ' được hiển thị

String text = 
    java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); 
             ^

Một dấu nháy đơn (aka trích dẫn đơn) trong một mô hình MessageFormat bắt đầu một chuỗi trích dẫn và không được giải thích trên riêng của nó. Từ số javadoc

Bản thân báo giá đơn lẻ phải được biểu thị bằng dấu ngoặc đơn kép '' trong suốt chuỗi.

Các StringYou\\'re là tương đương với việc thêm một nhân vật xuyệc ngược với String nên khác biệt duy nhất sẽ là You\re sẽ được sản xuất chứ không phải là Youre. (Trước khi giải pháp nháy kép '' áp dụng)

+0

Có phương pháp nào khác để làm định dạng như thế này nhưng không chuyển đổi báo giá đơn thành dấu ngoặc đơn kép? bởi vì nó gây phiền nhiễu. –

5

Bạn cần phải sử dụng dấu nháy đơn kép thay vì duy nhất trong "You''re", ví dụ:

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); 
System.out.println(text); 
9

Chỉ cần chắc chắn bạn đã sử dụng dấu nháy đơn kép ('')

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); 
System.out.println(text); 

Edit:

Trong vòng một string, một cặp dấu nháy đơn có thể được sử dụng để trích dẫn bất kỳ ký tự tùy ý nào ngoại trừ dấu nháy đơn. Ví dụ: chuỗi mẫu "'{0}'" đại diện cho chuỗi "{0}", không phải là FormatElement. ...

Bất kỳ trích dẫn không khớp nào được coi là đóng ở cuối mẫu đã cho. Ví dụ: chuỗi mẫu "' {0}" được coi là mẫu "' {0} '".

Nguồn http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

3

Đối với tất cả mọi người rằng có vấn đề về Android trong string.xml, sử dụng \ '\' thay vì dấu nháy đơn.

1

Sử dụng dấu nháy đơn (Unicode: \u2019) thay vì một dấu nháy đơn ' khắc phục sự cố mà không cần tăng gấp đôi \'.