एक स्ट्रिंग संसाधन फ़ाइल में प्रारूप विवरण


147

मेरे पास सामान्य स्ट्रिंग्स में परिभाषित स्ट्रिंग्स हैं। इस तरह से संसाधन संसाधन फ़ाइल:

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

क्या प्रारूप स्ट्रिंग को नीचे के रूप में परिभाषित करना संभव है

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

strings.xml संसाधन फ़ाइल में?

मैंने स्पेशल कैरेक्टर से बचने की कोशिश की लेकिन काम नहीं कर रहा है।


1
आप नीचे दिए गए तरीके से कोशिश कर सकते हैं: mTextView.setText (String.format ("स्कोर:" + "% 1 $ s", चलाता है)); जहाँ int रन = 100;
गणेश

जवाबों:


264

आपको formatted="false"अपने XML में उपयोग करने की आवश्यकता नहीं है । आपको बस पूरी तरह से योग्य स्ट्रिंग प्रारूप मार्कर का उपयोग करने की आवश्यकता है - %[POSITION]$[TYPE]( उदाहरण के लिए लघु संस्करण के बजाय, जहां [POSITION]यह विशेषता स्थिति है और [TYPE]चर प्रकार है) %sया %d

Android डॉक्स से उद्धरण : स्ट्रिंग स्वरूपण और स्टाइलिंग :

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

इस उदाहरण में, प्रारूप स्ट्रिंग के दो तर्क हैं: %1$sएक स्ट्रिंग है और %2$dएक दशमलव पूर्णांक है। आप इस तरह अपने आवेदन से तर्क के साथ स्ट्रिंग प्रारूपित कर सकते हैं:

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

1
मुझे java.util.IllegalFormatConversionException मिलती है:% d प्रारूप नहीं कर सकता java.lang।
डबल

6
यहां सभी अलग-अलग कन्वर्टर्स की एक सूची दी गई है, आपको संख्या प्रकार के लिए उपयुक्त एक चुनना होगा, आपको% f (फ्लोटिंग पॉइंट के लिए) की आवश्यकता हो सकती है: docs.oracle.com/javase/1.5.0/docs/ एपीआई / जावा / उपयोग /
फॉर्मेट। html

2
res.getString (R.string.w Welcome_messages, username, mailCount) काम करेंगे। संसाधन / संदर्भ की getString विधि में स्वरूपण कार्यक्षमता शामिल है।
स्काईओसिस ओएस

104

आपको formatted="false"अपने स्ट्रिंग संसाधन में जोड़ना चाहिए


यहाँ एक उदाहरण है

अपने में strings.xml:

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

आपके कोड में:

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

6
प्रारूपण स्ट्रिंग्स के लिए डॉक्स के अनुसार आवश्यक नहीं है। डेवलपर
.android.com

यह तय करने का एक तरीका है, लेकिन कुछ को भ्रमित हो सकता है क्योंकि formatted="false"हो सकता है कि स्ट्रिंग स्वरूपित न हो। एक और समाधान stackoverflow.com/a/20887690/228429
लोकलपीसीग्युई

18
ध्यान दें कि आप सरल कर सकते हैं String.format(getString(R.string.all), 3.12, 2) इस तरह सेgetString(R.string.all, 3.12, 2) :।
patryk.beza

इस पृष्ठ के सभी उत्तरों में एक बड़ी समस्या है: यदि आपको किसी परम के ठीक बगल में एक प्रतिशत चिह्न जोड़ने की आवश्यकता है, तो कहें 25%, Android क्रैश हो जाएगा।
हेनरिक डी सूसा

2
आप दो %% को शामिल करके प्रतिशत चिह्न से बच सकते हैं। यह निम्नलिखित मानक स्वरूपण सिंटैक्स है। उदाहरण: String.format ("प्रतिशत% d %% या फ्लोट% .2f %% के रूप में", 12, 12.34f); एक स्ट्रिंग उत्पन्न करेगा "प्रतिशत 12% या 12.34% फ्लोट के रूप में"
LanDenLabs

14

अंदर फ़ाइल strings.xmlइस तरह एक स्ट्रिंग संसाधन को परिभाषित:

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

अपने कोड के अंदर (यह मान लें कि यह संदर्भ से है) बस निम्नलिखित कार्य करें:

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

( LocalPCGuy या Giovanny Farto एम। String.format विधि से उत्तर की तुलना में आवश्यकता नहीं है।)


9

Android डॉक्स से उद्धरण :

यदि आपको अपने तार का उपयोग करने की आवश्यकता है String.format(String, Object...), तो आप स्ट्रिंग संसाधन में अपने प्रारूप तर्क डालकर ऐसा कर सकते हैं। उदाहरण के लिए, निम्नलिखित संसाधन के साथ:

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

इस उदाहरण में, प्रारूप स्ट्रिंग के दो तर्क हैं: %1$sएक स्ट्रिंग है और %2$dएक दशमलव संख्या है। आप इस तरह अपने आवेदन से तर्क के साथ स्ट्रिंग प्रारूपित कर सकते हैं:

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

0

मेरे लिए यह कोटलिन में इस तरह काम करता था:

my string.xml

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

मेरी कक्षा

 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: मूल्य: U $ 99,90

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.