कोटलिन में एक स्ट्रिंग को देखते हुए, मैं इसे स्ट्रिंग शाब्दिक प्रारूप में कैसे प्रिंट कर सकता हूं?

या लंबे रूप में, foo नाम की कुछ विधि दी गई है जो ऐसा करती है, यह निम्न कार्य करेगी:

println("Howdy".foo()) --> "Howdy" (quotes included in the output)
println("1 line\n\tand a tab".foo()) --> "1 line\n\tand a tab"
println("\"embeded quotes\"".foo()) --> "\"embeded quotes\""

असल में मैं डीबग आउटपुट बनाने की कोशिश कर रहा हूं जो स्ट्रिंग के कोड फॉर्म से मेल खाता है। toString केवल स्ट्रिंग लौटाता है, न कि ड्रेसिंग/एस्केपिंग को कोड में फिर से बनाने के लिए।

2
Travis Griggs 15 पद 2020, 23:47
यदि आप कोटलिन जेवीएम का उपयोग कर रहे हैं, तो इस प्रश्न का जावा संस्करण देखें। , आप कोटलिन-जावा इंटरऑप के लिए कोटलिन जेवीएम में उन समाधानों में से किसी का भी आसानी से उपयोग करने में सक्षम होना चाहिए
 – 
Kevin K
16 पद 2020, 04:34

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि डेवलपर्स इस सुविधा को सीधे भाषा में जोड़ने के लिए विशेष रूप से उत्सुक नहीं हैं, लेकिन आप इसे हमेशा स्वयं कर सकते हैं:

fun escapeChar(c: Char): String =
    when (c) {
        '\t' -> "\\t"
        '\b' -> "\\b"
        '\n' -> "\\n"
        '\r' -> "\\r"
        '"' -> "\\\""
        '\\' -> "\\\\"
        '\$' -> "\\\$"
        in ' '..'~' -> c.toString()
        else -> "\\u" + c.toInt().toString(16).padStart(4, '0')
    }

fun String.escape()
    = "\"${this.map(::escapeChar).joinToString("")}\""

ध्यान दें कि यह कार्यान्वयन उदारता के पक्ष में गलत है, इसलिए सभी गैर-असीसी वर्ण यूनिकोड से बचने में एन्कोड किए जाएंगे।

4
Aplet123 16 पद 2020, 01:32