2008-11-06 30 views
5

Tôi đang sử dụng MessageFormat để định dạng một số địa chỉ với một mẫu như thế này:Bất kỳ giải pháp khuôn mẫu nhẹ nào trong Java có hỗ trợ định dạng có điều kiện không?

"{0}\n{1}\n{2}\n{3}, {4} {5}" 

nơi

  • 0 = đường phố 1
  • 1 = đường phố 2
  • 2 = đường phố 3
  • 3 = thành phố
  • 4 = state
  • 5 = zip

Hầu hết các trường này là tùy chọn khi được chụp. Làm thế nào để tránh có một dòng trống khi ví dụ, không có đường 3? Tôi có thể sử dụng một mẫu như thế này "{0} {1} {2} {3} {4} {5}" và sau đó thay thế "đường phố 3 \ n" hoặc "" cho phù hợp, nhưng sau đó mẫu không cung cấp nhiều lợi ích đối với định dạng.

Có cách nào để bao gồm điều kiện trong chuỗi định dạng không? Hoặc là có một công cụ tạo khuôn mẫu nhẹ, tốt hơn có sẵn hỗ trợ định dạng có điều kiện không?

Trả lời

2

Không biết bạn sẽ cân nhắc mức độ nhẹ như thế nào nhưng Apache Velocity là một trong những công cụ tạo khuôn mẫu nổi tiếng nhất cho Java.

1

Bạn chỉ có thể thực hiện định dạng theo cách bạn đang thực hiện và sau đó xóa các dòng trống bằng cách thay thế một lần chạy nhiều hơn một '\n' s bằng một đơn '\n', ví dụ:

result = result.replaceAll("\n+", "\n"); 
+0

Cách đơn giản để giải quyết câu hỏi được yêu cầu - IMHO giới thiệu một khuôn mẫu mẫu chỉ để định dạng địa chỉ là quá mức cần thiết. –

2

jguru StringTemplates

này đã được sử dụng để xây dựng trang web jGuru - nó được khoảng một thời gian bây giờ.

7

EDIT: viết lại ...

Nếu bạn làm không quan tâm đến thiết kế, sau đó bạn có thể dễ dàng chọn một mẫu động cơ một cách ngẫu nhiên, hoặc vì bạn thích tên của nó, hoặc bất cứ điều gì. Nếu bạn không có tiêu chí để chọn một động cơ, thì ai quan tâm bạn chọn cái nào?

Mặt khác, nếu bạn quan tâm đến thiết kế, chẳng hạn như sử dụng mẫu thiết kế Model-View-Controller (MVC), thì lựa chọn của bạn sẽ nhanh chóng giảm bớt.

Hầu hết các câu trả lời ở đây đều nhấn mạnh sức mạnh của các công cụ mẫu khác nhau. Nhưng toàn bộ điểm của MVC là bạn không muốn làm nhiều hơn nữa, bởi vì làm nhiều hơn trong các mẫu của bạn cuối cùng sẽ làm tổn thương bạn rất xấu. Business logic không thuộc về View, nó thuộc về Model. Logic điều khiển thuộc về bộ điều khiển. Chỉ có một công cụ mẫu thực sự thực thi mẫu MVC. Nếu bạn không mong muốn mẫu MVC (có lẽ bạn đang di chuyển ra ngoài nó), một động cơ vẫn giúp bạn không làm tổn thương bản thân và khuyến khích bạn phân vùng chức năng của bạn đúng cách.

Chỉ có một công cụ tạo mẫu tốt: StringTemplate.Xem http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf để biết chi tiết tại sao.

Tôi đã sử dụng nó trên nhiều nền tảng (Python, Java, .Net) cũng như nhiều lựa chọn thay thế và các quy tắc StringTemplate.

Đã quyết định. Thưởng thức. Lời chúc tốt nhất.

5

Những người khác đã đề cập đến mẫu chuỗi, nhưng gần đây chúng tôi đã chuyển sang MVEL (cũng thực hiện nhiều hơn nhưng thực sự không thêm nhiều trọng lượng): http://mvel.codehaus.org/ (và tôi thấy dễ sử dụng hơn).

+0

giây về điều đó - MVEL thật tuyệt vời! – bennyl

0

Freemarker khá tốt. Đó là ánh sáng, nhanh chóng, có định dạng có điều kiện và một tấn các tính năng khác.

3

IMHO Chunk Templating engine là tốt nhất. Tệp jar chỉ có 180 KB! và hỗ trợ IFlần lặp. Thật là tuyệt!

+1

Thực sự rất tuyệt! –

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