非常に基本的な質問ですが、Kotlinで文字列を連結する正しい方法は何ですか?
Javaでは、このconcat()
メソッドを使用します。
String a = "Hello ";
String b = a.concat("World"); // b = Hello World
concat()
ただし、この機能はKotlinでは使用できません。+
サインを使うべきですか?
回答:
Kotlinでは、文字列補間/テンプレートを使用して連結できます。
val a = "Hello"
val b = "World"
val c = "$a $b"
出力は次のようになります。 Hello World
StringBuilder
します。これは、/が新しい文字列オブジェクトを作成するため、メモリの観点から最も効率的なアプローチです。+
plus()
または、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
"Hello" + "Word"
StringBuilderを使用して文字列に追加するのと同じくらいパフォーマンスが高いことを意味しますsomeHelloStringBuilder.append("World")
か?
kotlin.String
持っているplus
方法を:
a.plus(b)
詳細については、https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.htmlを参照してください。
+
オペレータが正常で、翻訳された演算子関数を呼び出していないplus
...これは慣用的ではありません
a = a.plus(b)
例えば
plus()
、StringBuilder
'sappendメソッドよりも実用的ではありません。
上記の受け入れられた答えに同意しますが、それは既知の文字列値にのみ適しています。動的な文字列値については、ここに私の提案があります。
// 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
これは、文字列のリストを区切り文字で連結する場合に役立ちます。
はい、+
記号を使用して連結できます。Kotlinには文字列テンプレートがあるため、次のように使用することをお勧めします。
var fn = "Hello"
var ln = "World"
"$fn $ln"
連結用。
String.plus()
メソッドを使用することもできます。
+
オペレータが正常で、翻訳された演算子関数を呼び出していないplus
...これは慣用的ではありません
@Rhusferの回答と同様に、私はこれを書きました。EditText
sのグループがあり、それらの値を連結する場合は、次のように記述できます。
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
kotlinの例で文字列を連結するさまざまな方法があります-
a = "Hello" , b= "World"
+演算子の使用
a+b
plus()
演算子の使用
a.plus(b)
注-+は内部で.plus()メソッドにのみ変換されます
上記の2つのメソッドでは、文字列は不変であるため、新しい文字列オブジェクトが作成されます。既存の文字列を変更する場合は、StringBuilderを使用できます
StringBuilder str = StringBuilder("Hello").append("World")
a.plus(b)
またはa + b
を書き込むことができ、同じバイトコードが生成されます