【问题标题】:Is there a Kotlin function to split a string into an array?是否有 Kotlin 函数将字符串拆分为数组?
【发布时间】:2019-07-31 18:17:19
【问题描述】:

我尝试过 str.split(,).toTypedArray(),但它没有生成数组。

var tasks = ""

tasks.plus(",").plus("Hey")
tasks.plus(",").plus("Hey")
tasks.plus(",").plus("Hey")
tasks.plus(",").plus("Hey")

val array = tasks.split(",").toTypedArray()

array.forEach {println(it)}

到目前为止,输出没有返回任何内容。

有没有办法拆分输入所在的字符串:

"xyx yxy xyx" 并获得输出: ["xyx","yxy","xyx"]

【问题讨论】:

标签: arrays string kotlin split


【解决方案1】:

在 Kotlin 中字符串是不可变的,所以不要期望这样:

tasks.plus(",").plus("Hey")

将任何内容附加到tasks
运算符函数plus() 返回要附加但不附加的字符串。
你必须这样做:

tasks = tasks.plus(",").plus("Hey")
tasks = tasks.plus(",").plus("Hey")
tasks = tasks.plus(",").plus("Hey")
tasks = tasks.plus(",").plus("Hey")

然后用:

val array = tasks.split(",").toTypedArray()
array.forEach { println(it) }

将打印的结果是:

<empty line here because of the 1st comma>
Hey
Hey
Hey
Hey

【讨论】:

  • 虽然如果你要构造一个字符串,调用plus() 是一种非常低效的方法。 (它将创建更长的临时副本。)最好将所有内容附加到 StringBuilder,然后在最后将其转换为 String。
  • @gidds 我同意你的看法。我的答案不是关于方法的效率,而是为什么 它不起作用 正如 OP 所说。
  • 哦,我没有批评你的回答,这很好!我只是添加了关于代码的进一步观点(因为这是人们容易出错的地方)。
【解决方案2】:

您可以使用返回Listsplit 基于space 字符拆分字符串,然后调用toTypedArray 从该列表中生成array

val arr = "xyx yxy xyx".split(" ").toTypedArray();

这是一个在线Demo

【讨论】:

    【解决方案3】:

    您的代码中的tasks 仍然为空,以下内容按预期工作:

    var tasks = ""
    
    tasks = tasks.plus(",").plus("Hey")
    .plus(",").plus("Hey")
    .plus(",").plus("Hey")
    .plus(",").plus("Hey")
    
    val array = tasks.split(",").toTypedArray()
    

    您实际上可以将tasks 设置为val,如下所示:

    val tasks = ",".plus("Hey")
    .plus(",").plus("Hey")
    .plus(",").plus("Hey")
    .plus(",").plus("Hey")
    

    甚至

    val tasks = ",Hey,Hey,Hey,Hey"
    

    还有

    ",Hey,Hey,Hey,Hey".split(",").forEach { println(it) }
    

    【讨论】:

      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 2016-04-01
      • 2021-11-29
      • 2012-02-22
      • 2012-12-22
      相关资源
      最近更新 更多