Java - Bao gồm các biến trong chuỗi?


114

Được, vì vậy tất cả chúng ta nên biết rằng bạn có thể bao gồm các biến vào chuỗi bằng cách thực hiện:

String string = "A string " + aVariable;

Có cách nào để làm điều đó như:

String string = "A string {aVariable}";

Nói cách khác: Mà không cần phải đóng dấu ngoặc kép và thêm dấu cộng. Nó rất kém hấp dẫn.


10
@Chandra Vui lòng không hỏi tại sao, mà hãy giải thích nếu có thể. Đó chỉ là cách tôi muốn làm điều đó. Cảm ơn.
Grey Adams

3
Sử dụng Groovy, sau đó bạn sẽ có thể thực hiện "A string $ {aVariable}" tất cả những gì bạn muốn.
Kaleb Brasee

2
Có rất nhiều kỹ thuật cho những thứ tương tự được thảo luận trong câu hỏi này , nhưng String.format()được tích hợp sẵn trong ngôn ngữ.
ig0774 10/03/12

@KalebBrasee Nghe có vẻ hoàn hảo, nhưng tôi luôn do dự khi sửa đổi ngôn ngữ. Tôi không muốn lùi bước.
Grey Adams

1
@GrayAdams Groovy không khiến bạn lùi bước, nó giúp bạn tự do! : D
Kaleb Brasee

Câu trả lời:


123

Bạn luôn có thể sử dụng String.format (....). I E,

String string = String.format("A String %s %2d", aStringVar, anIntVar);

Tôi không chắc liệu điều đó có đủ hấp dẫn đối với bạn hay không, nhưng nó có thể khá tiện dụng. Cú pháp giống như printf và java.util.Formatter. Tôi đã sử dụng nó nhiều đặc biệt nếu tôi muốn hiển thị dữ liệu số dạng bảng.


2
Tôi biết đây là một vấn đề quan điểm, nhưng tôi không thấy cách nào formathấp dẫn hơn một biểu thức nối chuỗi đơn giản. Điều đó formatcó nghĩa là khi bạn cần thực hiện đệm, định dạng số, vân vân.
Stephen C

1
@StephenC: Tôi không đồng ý với bạn chút nào. Nhưng nó là một giải pháp thay thế hữu ích cho định dạng chuỗi, đặc biệt khi cần thực hiện đệm như bạn nói và như tôi đã nói ở trên (tức là để hiển thị dữ liệu số dạng bảng). Tôi đã sử dụng nó khá nhiều để định dạng hóa học máu và báo cáo kết quả CBC.
Hovercraft Full Of Lươn

@StephenC Tôi thích định dạng vì một vài lý do: trước hết, '% d' sử dụng dấu phân cách dòng nền tảng. Thứ hai, bạn có thể dễ dàng tìm thấy tất cả các biến ở cuối. Bạn có thể dễ dàng định dạng lại hoặc thậm chí sắp xếp lại thứ tự các biến bạn nhập vào. Sẽ dễ dàng hơn để tránh những sai lầm (như 1 + "oops"), đặc biệt nếu bạn sử dụng FindBugs (phân tích cú pháp định dạng chuỗi và tham số đầu vào). Và, như người hỏi nói, trong nhiều trường hợp, nó dễ đọc hơn. Tất nhiên, thật đáng tiếc khi formatphương thức này đã được đặt tĩnh, đó là một sai lầm thiết kế khá ngu ngốc.
Maarten Bodewes

@owlstead - "Tất nhiên, thật tiếc khi phương thức định dạng đã được đặt tĩnh, đó là một sai lầm thiết kế khá ngu ngốc." . Huh? Làm thế nào sẽ formatliên quan đến chuỗi mục tiêu? Chắc chắn bạn không gợi ý rằng chúng tôi nên được mong đợi để viết "A String %s %2d".format(aStringVar, anIntVar)... bạn?
Stephen C

1
@owlstead - "asFormat" sẽ không đúng. Nó ngụ ý rằng phương thức đang tạo và trả về một đối tượng định dạng.
Stephen C

70

Đây được gọi là nội suy chuỗi; nó không tồn tại như vậy trong Java.

Một cách tiếp cận là sử dụng String.format:

String string = String.format("A string %s", aVariable);

Một cách tiếp cận khác là sử dụng thư viện tạo khuôn mẫu như Velocity hoặc FreeMarker .


38

Ngoài ra java.text.MessageFormat, hãy xem xét , sử dụng cú pháp liên quan có chỉ mục đối số số. Ví dụ,

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

dẫn đến việc stringchứa những thứ sau:

A string of ponies.

Thông thường hơn, lớp được sử dụng để định dạng số và thời gian của nó. Một ví dụ về JFreeChartđịnh dạng nhãn được mô tả ở đây ; lớp RCInfođịnh dạng ngăn trạng thái của trò chơi.


1
Đối với một số người đến từ CSharp, cách này đơn giản hơn vì nó tương tự như string.Format trong C #.
Mojtaba

0

bạn có thể sử dụng định dạng Chuỗi để bao gồm các biến trong chuỗi

tôi sử dụng mã này để bao gồm 2 biến trong chuỗi:

String myString = String.format ("đây là chuỗi của tôi% s% 2d", variable1Name, variable2Name);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.