dize kaynak dosyasındaki biçim ifadesi


147

Her zamanki gibi strings.xml Kaynak dosyasında tanımlanan dizeleri var:

<string name="hello_world"> HELLO</string>

Aşağıdakine benzer biçim dizeleri tanımlamak mümkün mü

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

strings.xml kaynak dosyasında?

Özel karakterlerden kaçmayı denedim ama çalışmıyor.


1
Aşağıdaki şekilde deneyebilirsiniz: mTextView.setText (String.format ("Skor:" + "% 1 $ s", çalışır)); burada int çalışır = 100;
Ganesh

Yanıtlar:


264

XML'inizde kullanmanıza gerek yoktur formatted="false". Kısa sürümler yerine, yalnızca tam nitelikli dize biçimi işaretleyicileri kullanmanız gerekir %[POSITION]$[TYPE]( [POSITION]öznitelik konumu ve [TYPE]değişken türüdür) %sveya %d.

Android Dokümanlar'dan Alıntı : Dize Biçimlendirme ve Stil :

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

Bu örnekte, biçim dizesinin iki bağımsız değişkeni vardır: %1$sbir dize ve %2$dbir ondalık tam sayıdır. Dizeyi uygulamanızdaki argümanlarla şu şekilde biçimlendirebilirsiniz:

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

1
Java.util.IllegalFormatConversionException:% d java.lang.Double argümanları $ d kullandığınızda biçimlendiremiyorum $ d bir tam sayı olduğunu düşünüyorum
user1634451 17:14

6
İşte tüm farklı dönüştürücülerin listesi, sayı türü için uygun olanı seçmeniz gerekir,% f (kayan nokta için) gerekebilir
LocalPCGuy

2
res.getString (R.string.welcome_messages, kullanıcı adı, mailCount) işi yapacak. Kaynak / bağlamın getString yöntemi, biçimlendirme işlevini içerir.
SkyOasis

104

formatted="false"Dize kaynağınıza eklemelisiniz


İşte bir örnek

Sizin strings.xml:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

Kodunuzda:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));

6
Dizeleri biçimlendirmek için belgelere göre gerekli değildir. developer.android.com/guide/topics/resources/…
Squonk

Bu düzeltmenin bir yoludur, ancak formatted="false"dize biçimlendirilmediğini ima edebileceğinden bazıları için kafa karıştırıcı olabilir. Başka bir çözüm gönderildi stackoverflow.com/a/20887690/228429
LocalPCGuy

18
Eğer basitleştirmek unutmayın String.format(getString(R.string.all), 3.12, 2)bu şekilde: getString(R.string.all, 3.12, 2).
patryk.beza

Bu sayfadaki tüm cevaplarla ilgili büyük bir sorun var: Bir parametrenin hemen yanında bir yüzde işareti eklemeniz gerekiyorsa 25%, Android çökecektir.
Henrique de Sousa

2
İki %% öğesini ekleyerek yüzde işaretinden kaçabilirsiniz. Bu standart biçimlendirme sözdizimini izler. Örnek: String.format ("% d %% veya kayan% .2f %%", 12, 12.34f); "Yüzde 12% veya kayan% 12.34 olarak" bir dize oluşturur
LanDenLabs

14

Dosya içinde şöyle strings.xmlbir String kaynağı tanımlayın:

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

Kodunuzun içinde (Bağlamdan miras aldığını varsayalım) aşağıdakileri yapmanız yeterlidir:

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

( LocalPCGuy veya Giovanny Farto M. tarafından verilen yanıtla karşılaştırıldığında String.format yöntemine gerek yoktur.)


9

Android Dokümanlar'dan Alıntı :

Dizelerinizi kullanarak biçimlendirmeniz gerekiyorsa String.format(String, Object...), bunu biçim bağımsız değişkenlerinizi dize kaynağına koyarak yapabilirsiniz. Örneğin, aşağıdaki kaynakla:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

Bu örnekte, biçim dizesinin iki bağımsız değişkeni vardır: %1$sbir dize ve %2$dbir ondalık sayıdır. Dizeyi uygulamanızdaki argümanlarla şu şekilde biçimlendirebilirsiniz:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

0

Benim için Kotlin'de böyle çalıştı:

benim string.xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

benim class.kt

 var formatPrice: CharSequence? = null
 var unitPrice = 9990
 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
 Log.d("Double_CharSequence", "$formatPrice")

D / Double_CharSequence: Fiyat: 99,90 TL

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.