Java - Menyertakan variabel dalam string?

114

Oke, jadi kita semua harus tahu bahwa Anda bisa memasukkan variabel ke dalam string dengan melakukan:

String string = "A string " + aVariable;

Apakah ada cara untuk melakukannya seperti:

String string = "A string {aVariable}";

Dengan kata lain: Tanpa harus menutup tanda petik dan menambahkan tanda plus. Ini sangat tidak menarik.

Grey Adams
sumber
10
@Chandra Tolong jangan tanya kenapa, tapi jelaskan jika memungkinkan. Itu hanya bagaimana saya lebih suka melakukannya. Terima kasih.
Grey Adams
3
Gunakan Groovy, maka Anda akan dapat melakukan "A string $ {aVariable}" semau Anda.
Kaleb Brasee
2
Ada berbagai macam teknik untuk hal-hal serupa yang dibahas dalam pertanyaan ini , tetapi String.format()sudah ada di dalam bahasa.
ig0774
@KalebBrasee Kedengarannya sempurna, tapi saya selalu ragu-ragu saat harus memodifikasi bahasa. Saya tidak ingin mengatur diri saya kembali.
Grey Adams
1
@GrayAdams Groovy tidak membuat Anda mundur, itu membebaskan Anda! : D
Kaleb Brasee

Jawaban:

124

Anda selalu dapat menggunakan String.format (....). yaitu,

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

Saya tidak yakin apakah itu cukup menarik untuk Anda, tetapi itu bisa sangat berguna. Sintaksnya sama dengan printf dan java.util.Formatter. Saya sudah sering menggunakannya terutama jika saya ingin menampilkan data numerik tabular.

Hovercraft Full Of Eels
sumber
2
Saya tahu ini adalah masalah opini, tapi saya tidak melihat bagaimana formatitu lebih menarik daripada ekspresi rangkaian String sederhana. Yang formatmenjadi miliknya sendiri adalah ketika Anda perlu melakukan padding, format angka, dan sebagainya.
Stephen C
1
@ StephenC: Saya sama sekali tidak setuju dengan Anda. Tetapi ini adalah alternatif yang berguna untuk pemformatan String terutama ketika perlu melakukan padding seperti yang Anda katakan dan seperti yang saya katakan di atas (yaitu, untuk menampilkan data numerik tabel). Saya telah menggunakannya cukup banyak untuk memformat kimia darah dan laporan hasil CBC.
Hovercraft Full Of Eels
@StephenC Saya suka format karena beberapa alasan: pertama-tama, '% d' menggunakan pemisah baris platform. Kedua, Anda dapat dengan mudah menemukan semua variabel di bagian akhir. Anda dapat dengan mudah memformat ulang atau bahkan menyusun ulang variabel yang Anda masukkan. Lebih mudah untuk menghindari kesalahan (seperti 1 + "oops"), terutama jika Anda menggunakan FindBugs (yang mengurai string format dan parameter input). Dan, seperti yang dikatakan penanya, dalam banyak kasus, ini lebih mudah dibaca. Tentu saja, sangat disayangkan bahwa formatmetode ini dibuat statis, itu adalah kesalahan desain yang agak bodoh.
Maarten Bodewes
@owlstead - "Tentu saja, memalukan bahwa metode format telah dibuat statis, itu adalah kesalahan desain yang agak bodoh." . Hah? Bagaimana formathubungannya dengan string target? Tentunya Anda tidak menyarankan agar kami diharapkan untuk menulis "A String %s %2d".format(aStringVar, anIntVar)... bukan?
Stephen C
1
@owlstead - "asFormat" tidak benar. Ini menyiratkan bahwa metode tersebut membuat dan mengembalikan objek format.
Stephen C
70

Ini disebut interpolasi string; tidak ada seperti itu di Jawa.

Salah satu pendekatannya adalah dengan menggunakan String.format:

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

Pendekatan lain adalah dengan menggunakan pustaka template seperti Velocity atau FreeMarker .

Jacob Mattison
sumber
38

Pertimbangkan juga java.text.MessageFormat, yang menggunakan sintaks terkait yang memiliki indeks argumen numerik. Sebagai contoh,

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

hasil stringmengandung yang berikut ini:

A string of ponies.

Lebih umum, kelas digunakan untuk pemformatan numerik dan temporal. Contoh JFreeChartformat label dijelaskan di sini ; kelas RCInfomemformat panel status permainan.

tempat sampah
sumber
1
Untuk seseorang yang berasal dari CSharp cara ini lebih mudah karena mirip dengan string.Format di C #.
Mojtaba
0

Anda dapat menggunakan format String untuk memasukkan variabel dalam string

saya menggunakan kode ini untuk memasukkan 2 variabel dalam string:

String myString = String.format ("ini adalah string saya% s% 2d", variable1Name, variable2Name);

alinn
sumber