Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Kotlin-如何正确连接字符串_String_Kotlin - Fatal编程技术网

String Kotlin-如何正确连接字符串

String Kotlin-如何正确连接字符串,string,kotlin,String,Kotlin,一个非常基本的问题,在Kotlin中连接字符串的正确方法是什么 在Java中,您将使用concat()方法,例如 String a = "Hello "; String b = a.concat("World"); // b = Hello World 但是,Kotlin无法使用concat()函数。我应该使用+符号吗?字符串模板/插值 在Kotlin中,可以使用以下方法连接: 输出将是:Hello World 编译器使用内存方面最有效的方法,因为+/ 或者可以使用显式连接 val a =

一个非常基本的问题,在Kotlin中连接字符串的正确方法是什么

在Java中,您将使用
concat()
方法,例如

String a = "Hello ";
String b = a.concat("World"); // b = Hello World
但是,Kotlin无法使用
concat()
函数。我应该使用
+
符号吗?

字符串模板/插值 在Kotlin中,可以使用以下方法连接:

输出将是:
Hello World

  • 编译器使用内存方面最有效的方法,因为
    +
    /
或者可以使用显式连接

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

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

print(c)
输出将是:
HelloWorld

新字符串对象 或者可以使用
+
/运算符连接:

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

print(c)
输出将是:
HelloWorld

  • 这将创建一个新的字符串对象

kotlin.String
有一个
plus
方法:

a.plus(b)

有关详细信息,请参阅。

是的,可以使用
+
符号连接。Kotlin有字符串模板,因此最好像这样使用它们:

var fn = "Hello"
var ln = "World"
“$fn$ln”
用于连接


您甚至可以使用
String.plus()
方法。

我同意上面接受的答案,但它只适用于已知的字符串值。 对于动态字符串值,这里是我的建议

// 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
//列表可能来自类似JSON的API
{
“姓名”:[
“第1人”,
“第二人”,
“第三人”,
...
“人N”
]
}
var listOfNames=mutableListOf()
val stringOfNames=listOfNames.joinToString(“,”)
//“,”类似于我写的这个。如果您有一组
EditText
s并希望连接它们的值,您可以编写:

listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator = "") { it.text.toString() }
如果要连接
映射
,请使用以下命令:

map.entries.joinToString(separator = ", ")
要连接
捆绑包

它按字母顺序对键进行排序

例如:

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
val-map:MutableMap=mutableMapOf(“价格”到20.5)
将+=“排列”映射到0
映射+=“标题”到“晚霜”
println(map.entries.joinToString(separator=“,”))
//价格=20.5,排列=0,标题=晚霜
val bundle=bundleOf(“价格”至20.5)
bundle.putAll(bundleOf(“排列”到0))
bundle.putAll(bundleOf(“标题”改为“晚霜”))
val束带=
bundle.keySet().joinToString(“,”{key->“$key=${bundle[key]}”
println(集束线)
//排列=0,价格=20.5,标题=晚霜

在kotlin中有多种连接字符串的方法 示例-

a = "Hello" , b= "World"
  • 使用+运算符
    a+b

  • 使用
    plus()
    运算符

    a.plus(b)

  • 注意-+仅在内部转换为.plus()方法

    在上述两种方法中,由于字符串是不可变的,因此会创建一个新的字符串对象。如果要修改现有字符串,可以使用StringBuilder

    StringBuilder str = StringBuilder("Hello").append("World")
    
    yourString+=“新闻字符串”


    通过这种方式可以连接字符串

    试试这个,我认为这是在Kotlin中连接字符串的一种本机方式:

    val result = buildString{
        append("a")
        append("b")
    }
    
    println(result)
    
    // you will see "ab" in console.
    

    在Kotlin中,我们可以使用
    joinToString()

    val tags=arrayOf("hi","bye")
    
    val finalString=tags.joinToString (separator = ","){ "#$it" }
    
    结果是:

    #你好,再见


    如果列表来自服务器

    var tags = mutableListOf<Tags>() // list from server
    
    val finalString=tags.joinToString (separator = "-"){ "#${it.tagname}" }
    
    var tags=mutableListOf()//来自服务器的列表
    val finalString=tags.joinToString(分隔符=“-”{“#${it.tagname}}”
    
    结果是:

    #你好,再见


    我建议,如果您有一组有限的预定义值,那么最有效和可读的方法是使用字符串模板(它使用字符串生成器执行concatation)

    另一方面,如果有一组值,则使用joinToString方法

    val res = (1..100).joinToString(",")
    println(res) //prints: 1,2,3,...,100
    

    我相信这篇文章中提出的一些解决方案是无效的。例如使用加号或+或为一组有限的entri创建一个集合,然后在其上应用joinToString

    如果您有一个对象,并且希望连接一个对象的两个值,如

    data class Person(
    val firstName: String,
    val lastName: String
    )
    
    那么简单的跟随是行不通的

    val c = "$person.firstName $person.lastName"
    
    在这种情况下,正确的方法是

    "${person.firstName} ${person.lastName}"
    
    如果您希望在连接的值之间有任何字符串,只需在没有任何辅助符号的情况下写入即可。例如,如果我想要“Name is”,然后在名字和姓氏之间加一个连字符,那么

     "Name is ${person.firstName}-${person.lastName}"
    

    运算符“+”被转换为plus(),因此您可以编写
    a.plus(b)
    a+b
    ,并生成相同的字节码。我查看字节码,字符串插值使用StringBuilderinternally@crgarridos,这是否意味着对于Kotlin,使用字符串插值进行串联
    “Hello”+“Word”
    的性能与使用StringBuilder附加到字符串一样,
    someHelloStringBuilder.append(“World”)
    ?字符串插值指的是文本字符串内部变量的解析。所以从技术上讲是的。
    +
    操作符是正常的,不调用翻译后的操作符函数
    plus
    。。。这不是惯用语,你为什么这么认为?别忘了像我一样影响你的结果,比如
    a=a.plus(b)
    forinstance@lorenzo的评论解释了为什么这个答案不如上述解决方案。当连接依赖于多个if语句时,
    plus()
    不如
    StringBuilder
    的append方法实用。
    +
    运算符是正常的,不调用转换运算符函数
    plus
    。。。这不是惯用语。你能解释一下为什么你认为+的加号版本不是惯用语吗?它是
    buildString{
    而不是
    stringBuild{
    @arnnuem。我已经修复了它(你应该可以这么做)。
    val c = "$person.firstName $person.lastName"
    
    "${person.firstName} ${person.lastName}"
    
     "Name is ${person.firstName}-${person.lastName}"