कोटलिन - कैसे एक स्ट्रिंग को सही ढंग से समेटना है


90

एक बहुत ही बुनियादी सवाल, कोटलिन में एक स्ट्रिंग को समाप्‍त करने का सही तरीका क्‍या है?

जावा में आप concat()विधि का प्रयोग करेंगे , जैसे

String a = "Hello ";
String b = a.concat("World"); // b = Hello World

concat()हालांकि कोटलिन के लिए यह फ़ंक्शन उपलब्ध नहीं है। क्या मुझे +साइन का उपयोग करना चाहिए ?

जवाबों:


139

स्ट्रिंग टेम्पलेट / इंटरपोलेशन

कोटलिन में, आप स्ट्रिंग इंटरपोलेशन / टेम्प्लेट का उपयोग कर सहमति दे सकते हैं :

val a = "Hello"
val b = "World"
val c = "$a $b"

उत्पादन होगा: Hello World

या आप StringBuilderस्पष्ट रूप से उपयोग कर सकते हैं ।

val a = "Hello"
val b = "World"

val sb = StringBuilder()
sb.append(a).append(b)
val c = sb.toString()

print(c)

उत्पादन होगा: HelloWorld

नई स्ट्रिंग ऑब्जेक्ट

या आप ऑपरेटर +/ plus()ऑपरेटर का उपयोग कर सकते हैं :

val a = "Hello"
val b = "World"
val c = a + b   // same as calling operator function a.plus(b)

print(c)

उत्पादन होगा: HelloWorld

  • यह एक नई स्ट्रिंग ऑब्जेक्ट बनाएगा।

7
ऑपरेटर "+" प्लस () है, तो आप या तो लिखने कर सकते हैं में अनुवाद किया है a.plus(b)या a + bऔर एक ही बाईटकोड उत्पन्न होता है
D3xter

21
मैं bytecode और स्ट्रिंग प्रक्षेप में देखा StringBuilder का उपयोग करता है आंतरिक रूप से
crgarridos

@ क्रैग्रिडोस, क्या इसका मतलब यह होगा कि कोटलीन के लिए कॉनट्रैप्टेशन के लिए स्ट्रिंग इंटरपोलेशन का उपयोग करना "Hello" + "Word"उतना ही अच्छा है जितना कि स्ट्रिंग को अपेंड करने के लिए स्ट्रिंगबर्ल का उपयोग करना someHelloStringBuilder.append("World")?
एडम हर्वित्ज

1
स्ट्रिंग प्रक्षेप एक शाब्दिक स्ट्रिंग के अंदर चर के संकल्प को संदर्भित करता है। तो तकनीकी रूप से हाँ।
crgarridos

23

kotlin.Stringएक plusविधि है:

a.plus(b)

देखें https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html जानकारी के लिए।


3
+ऑपरेटर सामान्य है, बुला अनुवाद ऑपरेटर समारोह नहीं plus ... यह नहीं मुहावरेदार है
जेसन Minard

आप ऐसा क्यों सोचते हैं ?
incises

1
मत भूलो की तरह की तरह मैंने किया था अपने परिणाम को प्रभावित करने के लिए, a = a.plus(b)उदाहरण के लिए
लोरेंजो

@lorenzo की टिप्पणी बताती है कि ऊपर दिए गए समाधानों के लिए यह उत्तर कम बेहतर क्यों है। जब कथानक कई पर निर्भर होता है यदि कथन 's परिशिष्ट विधि plus()से कम व्यावहारिक होते हैं StringBuilder
पैनासोस जीआर

10

मैं ऊपर दिए गए स्वीकृत उत्तर से सहमत हूं लेकिन यह केवल ज्ञात स्ट्रिंग मानों के लिए अच्छा है। गतिशील स्ट्रिंग मानों के लिए यहाँ मेरा सुझाव है।

// A list may come from an API JSON like
{
   "names": [
      "Person 1",
      "Person 2",
      "Person 3",
         ...
      "Person N"
   ]
}
var listOfNames = mutableListOf<String>() 

val stringOfNames = listOfNames.joinToString(", ") 
// ", " <- a separator for the strings, could be any string that you want

// Posible result
// Person 1, Person 2, Person 3, ..., Person N

यह विभाजक के साथ तार की सुगम सूची के लिए उपयोगी है।


9

हां, आप एक +संकेत का उपयोग करके समाप्‍त कर सकते हैं । कोटलिन में स्ट्रिंग टेम्पलेट हैं, इसलिए उनका उपयोग करना बेहतर है:

var fn = "Hello"
var ln = "World"

"$fn $ln" संघटन के लिए।

तुम भी String.plus()विधि का उपयोग कर सकते हैं ।


+ऑपरेटर सामान्य है, बुला अनुवाद ऑपरेटर समारोह नहीं plus ... यह नहीं मुहावरेदार है
जेसन Minard

क्या आप बता सकते हैं कि आपको क्यों लगता है कि + का प्लस संस्करण मुहावरेदार नहीं है?
incises

5

यह कोशिश करो, मुझे लगता है कि यह कोटलिन में तार को जोड़ने का एक मूल तरीका है:

val result = buildString{
    append("a")
    append("b")
}

println(result)

// you will see "ab" in console.

1
इसके buildString {बजायstringBuild {
arnonuem

@arnonuem मैंने इसे ठीक कर दिया है (जैसा कि आपको स्वतंत्र महसूस करना चाहिए था)।
एलेन स्पार्टस

5

@Rusfer उत्तर के समान मैंने यह लिखा था। यदि आपके पास कोई समूह है EditTextऔर आप उनके मूल्यों को समझना चाहते हैं, तो आप लिख सकते हैं:

listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator = "") { it.text.toString() }

यदि आप सहमति देना चाहते हैं Map, तो इसका उपयोग करें:

map.entries.joinToString(separator = ", ")

संक्षिप्त करने के लिए Bundle, का उपयोग करें

bundle.keySet().joinToString(", ") { key -> "$key=${bundle[key]}" }

यह वर्णानुक्रम में कुंजियों को क्रमबद्ध करता है।

उदाहरण:

val map: MutableMap<String, Any> = mutableMapOf("price" to 20.5)
map += "arrange" to 0
map += "title" to "Night cream"
println(map.entries.joinToString(separator = ", "))

// price=20.5, arrange=0, title=Night cream

val bundle = bundleOf("price" to 20.5)
bundle.putAll(bundleOf("arrange" to 0))
bundle.putAll(bundleOf("title" to "Night cream"))
val bundleString =
    bundle.keySet().joinToString(", ") { key -> "$key=${bundle[key]}" }
println(bundleString)

// arrange=0, price=20.5, title=Night cream

2

कोटलिन में तार को समाहित करने के विभिन्न तरीके हैं उदाहरण -

a = "Hello" , b= "World"
  1. + ऑपरेटर का उपयोग करना a+b

  2. plus()ऑपरेटर का उपयोग करना

    a.plus(b)

नोट - + को केवल .plus () पद्धति में आंतरिक रूप से परिवर्तित किया गया है

उपरोक्त 2 विधियों में, स्ट्रिंग के अपरिवर्तनीय होने के कारण एक नई स्ट्रिंग ऑब्जेक्ट बनाई जाती है। यदि हम मौजूदा स्ट्रिंग को संशोधित करना चाहते हैं, तो हम StringBuilder का उपयोग कर सकते हैं

StringBuilder str = StringBuilder("Hello").append("World")

1

yourString + = "newString"

इस तरह से आप एक स्ट्रिंग समाप्‍त कर सकते हैं

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