Saya mencoba menggunakan .format
metode string. Tetapi jika saya menempatkan% 1,% 2, dll dalam string, java.util.UnknownFormatConversionException dilemparkan ke bagian kode Java yang membingungkan:
private void checkText(String s) {
int idx;
// If there are any '%' in the given string, we got a bad format
// specifier.
if ((idx = s.indexOf('%')) != -1) {
char c = (idx > s.length() - 2 ? '%' : s.charAt(idx + 1));
throw new UnknownFormatConversionException(String.valueOf(c));
}
}
Dari sini saya mengerti bahwa %
arang dilarang. Jika demikian, lalu apa yang harus saya gunakan untuk placeholder argumen?
Saya menggunakan Scala 2.8.
format
langsung ke string literal:"Hello %s, isn't %s cool?".format("Ivan", "Scala")
Anda tidak perlu menggunakan angka untuk menunjukkan posisi. Secara default, posisi argumen hanyalah urutan yang muncul dalam string.
Berikut ini contoh cara yang tepat untuk menggunakan ini:
Anda akan selalu menggunakan
%
diikuti oleh beberapa karakter lain untuk membiarkan metode tahu bagaimana seharusnya menampilkan string.%s
mungkin yang paling umum, dan itu hanya berarti bahwa argumen harus diperlakukan sebagai string.Saya tidak akan mencantumkan setiap opsi, tetapi saya akan memberikan beberapa contoh hanya untuk memberi Anda ide:
String.format
hanya menggunakanjava.util.Formatter
, jadi untuk deskripsi lengkap tentang opsi Anda dapat melihat javadocs Formatter .Dan, seperti yang disebutkan BalusC, Anda akan melihat dalam dokumentasi yang dimungkinkan untuk mengubah urutan argumen default jika perlu. Namun, mungkin satu-satunya saat Anda perlu / ingin melakukan ini adalah jika Anda menggunakan argumen yang sama lebih dari sekali.
sumber
Alih-alih melihat kode sumber, Anda harus membaca sintaks String.format () dan javadoc .
Anda menentukan format nilai setelah%. Misalnya untuk bilangan bulat desimal itu
d
, dan untuk String itu adalahs
:Keluaran:
Untuk melakukan apa yang Anda mencoba (menggunakan indeks argumen), Anda menggunakan:
*n*$
,Keluaran:
sumber
Anda bisa menggunakan ini;
Keluaran:
sumber
{0}
dan{1}
bukannya%1$
dan%2$
.Perhatikan juga bahwa Scala memperluas String dengan sejumlah metode (melalui konversi implisit ke WrappedString yang dibawa oleh Predef) sehingga Anda juga dapat melakukan hal berikut:
sumber
Referensi resmi adalah kelas
Formatter
.sumber
Dalam Scala 2.10
sumber
printf
, Anda bahkan dapat mendefinisikan interpolasi Anda sendiri (saya belum mencoba). The$name
berarti bahwa itu harus mengganti dengan nilai variabelname
, Anda juga bisa melakukan operasi di interpolasi, misalnyas"Hello ${name.toUpperCase}, it's $weather today!"
Ini adalah daftar apa yang
String.format
bisa dilakukan. Hal yang sama berlaku untukprintf
sumber
Berikut adalah daftar pemformat yang digunakan dengan String.format ()
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html
sumber
Walaupun @Londo menyebut interpolator string Scala, saya pikir interpolator string "f" Scala lebih relevan dengan pertanyaan awal. Contoh yang digunakan beberapa waktu dalam tanggapan lain juga dapat ditulis (karena Scala 2.10) dengan cara ini:
Koneksi ke pertanyaan awal adalah untuk menyadari bahwa:
formatted
didefinisikan dengan string yang diawali dengan huruf "f". Ini adalah interpolator string "f" (pemformatan).java.util.Formatter
java.lang.String.format
menggunakan hal yang samajava.util.Formatter
Hal yang menyenangkan tentang interpolasi string adalah memungkinkan Anda melihat variabel mana yang diganti secara langsung ke dalam string daripada harus mencocokkannya dengan argumen ke
String.format
metode.sumber
Dalam scala, untuk Interpolasi string kita memiliki $ yang menyelamatkan hari dan membuat hidup kita lebih mudah:
Sebagai Contoh: Anda ingin mendefinisikan fungsi yang mengambil nama dan umur input dan mengatakan Halo dengan nama dan mengatakan usianya. Itu bisa ditulis seperti ini:
Karenanya, Saat Anda memanggil fungsi ini: seperti ini:
Hasilnya adalah:
Anda dapat menulis kode untuk mengubahnya di baris yang sama, seperti jika Anda ingin menambahkan 10 tahun ke usia!
maka fungsinya bisa:
Dan sekarang hasilnya adalah:
sumber