कोटलिन स्ट्रिंग टेम्पलेट्स में प्रारूपित करें


199

कोटलिन में एक उत्कृष्ट विशेषता है जिसे स्ट्रिंग टेम्पलेट कहा जाता है। मुझे वास्तव में इसे प्यार है।

 val i = 10 
 val s = "i = $i" // evaluates to "i = 10"

लेकिन क्या टेम्प्लेट में कोई प्रारूपण संभव है? उदाहरण के लिए, मैं कोटलिन में स्ट्रिंग टेम्पलेट में डबल प्रारूप करना चाहता हूं, कम से कम दशमलव विभाजक के बाद कई अंक निर्धारित करने के लिए:

val pi = 3.14159265358979323
val s = "pi = $pi??" // How to make it "pi = 3.14"?

क्या इसके लिए कोई मल्टीप्लेट रिकॉर्डर समाधान है?
केनिची

जवाबों:


249

दुर्भाग्य से, स्ट्रिंग टेम्पलेट्स में प्रारूपण के लिए अभी तक कोई अंतर्निहित समर्थन नहीं है, एक समाधान के रूप में, आप कुछ का उपयोग कर सकते हैं:

"pi = ${pi.format(2)}"

.format(n)समारोह के रूप में आप अपने आप को परिभाषित करने की आवश्यकता होगी

fun Double.format(digits: Int) = "%.${digits}f".format(this)

यहां स्पष्ट रूप से कार्यक्षमता का एक टुकड़ा है जो फिलहाल कोटलिन से गायब है, हम इसे ठीक कर देंगे।


7
क्या यह अभी उपलब्ध है?
रघुनाथ जवाहर

4
@ रघुनाथ जवाहर, जवाब अभी भी अद्यतित है, हमने इस पर अभी तक सुधार नहीं किया है
एंड्री ब्रेस्लेव

3
@AndreyBreslav अब कैसे होगा? क्या यह उपलब्ध है?
सीहान सात

37
क्या मैं गलत हूं या यह अभी भी लगभग 4 साल बाद उपलब्ध नहीं है?
वारस्ट

6
इसे 2020 के लिए नए साल के वर्तमान के रूप में जोड़ें!
अंकन अंक

133

वर्कअराउंड के रूप में, एक कोटलिन stdlib फ़ंक्शन है जिसे एक अच्छे तरीके से उपयोग किया जा सकता है और जावा के स्ट्रिंग प्रारूप के साथ पूरी तरह से संगत है (यह जावा के चारों ओर केवल एक आवरण है String.format())

कोटलिन के दस्तावेज देखें

आपका कोड होगा:

val pi = 3.14159265358979323
val s = "pi = %.2f".format(pi)

2
मुझे लगता है कि वह इस दस्तावेज का मतलब लगा रहा है: docs.oracle.com/javase/8/docs/api/java/lang/…
strj

@Rob प्रलेखन पर चर्चा भी देखें
मैट मैक

कोटलिन में 1.3.21
एफपी

28

कोटलिन के स्ट्रिंग वर्ग में अब एक प्रारूप फ़ंक्शन है, जो आंतरिक रूप से जावा की String.formatविधि का उपयोग करता है :

/**
 * Uses this string as a format string and returns a string obtained by substituting the specified arguments,
 * using the default locale.
 */
@kotlin.internal.InlineOnly
public inline fun String.Companion.format(format: String, vararg args: Any?): String = java.lang.String.format(format, *args)

प्रयोग

val pi = 3.14159265358979323
val formatted = String.format("%.2f", pi) ;
println(formatted)
>>3.14

1
String.Companion.format अभी Kotlin v1.2.21 में नहीं मिला है। विकल्प क्या है?
साईं

19

इसका सरल, उपयोग करें:

val str:String = "%.2f".format(3.14159)

3

चूंकि String.formatकेवल एक एक्सटेंशन फ़ंक्शन है ( यहां देखें ) जो आंतरिक रूप से java.lang.String.formatआपको कॉल करता है, यदि आप अधिक लचीलेपन की आवश्यकता है, तो जावा के डेसीमलफार्मेट का उपयोग करके अपने खुद के एक्सटेंशन फ़ंक्शन को लिख सकते हैं :

fun Double.format(fracDigits: Int): String {
    val df = DecimalFormat()
    df.setMaximumFractionDigits(fracDigits)
    return df.format(this)
}

println(3.14159.format(2)) // 3.14

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