কোটলিন স্ট্রিং টেম্পলেটগুলিতে ফর্ম্যাট


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"?

এটির জন্য কোনও মাল্টিপ্ল্যাটফর্ম সমাধান আছে কি?
কেনিচি

উত্তর:


248

দুর্ভাগ্যক্রমে, স্ট্রিং টেম্পলেটগুলিতে ফর্ম্যাট করার জন্য এখনও অন্তর্নির্মিত সমর্থন নেই, একটি কাজের ভিত্তিতে, আপনি এর মতো কিছু ব্যবহার করতে পারেন:

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

.format(n)ফাংশন আপনি হিসাবে নিজেকে সংজ্ঞায়িত করতে প্রয়োজন চাই

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

এখানে স্পষ্টত একটি কার্যকারিতা রয়েছে যা এই মুহূর্তে কোটলিন থেকে অনুপস্থিত, আমরা এটি ঠিক করব।


7
এটা কি এখন পাওয়া যায়?
রাগুনাথ জওহর

4
@ রাগুনাথ জওহর, উত্তরটি এখনও আপ টু ডেট, আমরা এখনও এটিতে উন্নতি করতে পারি নি
অ্যান্ড্রে ব্রেস্লাভ

3
অ্যান্ড্রেব্রেস্লাভ এখন কেমন আছে? এটা কি পাওয়া যায়?
সিহান আদিল সাত

37
আমি কি ভুল করছি বা প্রায় 4 বছর পরে এটি এখনও পাওয়া যাচ্ছে না?
ওয়ার্কস্ট

6
2020 এর জন্য এটি একটি নতুন বছরের উপস্থিতি হিসাবে যুক্ত করুন!
চিহ্ন চিহ্নিত

132

কার্যকারণ হিসাবে, একটি কোটলিন স্টিডলিব ফাংশন রয়েছে যা একটি দুর্দান্ত উপায়ে ব্যবহার করা যেতে পারে এবং জাভার স্ট্রিং বিন্যাসের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ (এটি জাভা এর চারপাশে কেবল একটি মোড়ক String.format())

কোটলিনের ডকুমেন্টেশন দেখুন

আপনার কোডটি হবে:

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

2
আমি অনুমান করছি যে তিনি এই ডকুমেন্টেশনটি বোঝাতে চেয়েছিলেন: docs.oracle.com/javase/8/docs/api/java/lang/…
আটকে

@ রব ডকুমেন্টেশনের বিষয়েও আলোচনা দেখুন
ম্যাট ম্যাক

কোটলিনে 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
স্ট্রিং.কম্পিয়ন.আরমেট এখন কোটলিন 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

0

উদাহরণ দুটি:

infix fun Double.f(fmt: String) = "%$fmt".format(this)
infix fun Double.f(fmt: Float) = "%${if (fmt < 1) fmt + 1 else fmt}f".format(this)

val pi = 3.14159265358979323

println("""pi = ${pi f ".2f"}""")
println("pi = ${pi f .2f}")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.