String.format içinde bir parametre yeniden kullanılsın mı?


136
String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

Merhaba değişkeninin format yöntemine yapılan çağrıda birden çok kez tekrarlanması gerekiyor mu yoksa tüm %sjetonlara uygulanacak argümanı bir kez belirtmenize izin veren bir steno versiyonu var mı?

Yanıtlar:


261

Gönderen docs :

  • Genel, karakter ve sayısal türler için biçim belirleyicileri aşağıdaki sözdizimine sahiptir:

        %[argument_index$][flags][width][.precision]conversion

    İsteğe bağlı argument_index , bağımsız değişkenin bağımsız değişken listesindeki konumunu belirten ondalık bir tamsayıdır. İlk argümana, "1$"ikincisine "2$"vb.

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);


12

Kullanıcı indeksi bağımsız değişkenini %[argument_index$]aşağıdaki gibi kullanmanız gerekir :

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

Sonuç: hello hello hello hello hello hello


4

Bir argümanı tekrar kullanmak için yaygın bir durum String.format, bir ayırıcıdır (örneğin ";"CSV veya konsol sekmesi).

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

Bu istenen çıktı değil. "c"hiçbir yerde görünmüyor.

Öncelikle ayırıcıyı (ile %s) ve yalnızca %2$saşağıdaki durumlar için bağımsız değişken dizinini ( ) kullanmanız gerekir :

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

Okunabilirlik ve hata ayıklama için boşluklar eklenmiştir. Biçim doğru göründüğünde, metin düzenleyicisinde boşluklar kaldırılabilir:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.