如何在 Kotlin 中将字符串分割成数组?

90

我需要将从文件读入的字符串分割成一个值数组。我想在逗号处切割字符串,例如,如果读入的字符串为:

"name, 2012, 2017"

数组中的值将是:

  • 数组下标0 - name
  • 数组下标1 - 2012
  • 数组下标2 - 2017

我在Java中找到了这个例子:

String[] stringArray = string.split(",");

我该如何在 Kotlin 中实现它?


1
只要你在 IntelliJ/AndroidStudio 中打开了 Java 代码和 Kotlin 文件,当你将它们粘贴到编辑器中时,IntelliJ 就会提示你自动将该代码转换为 Kotlin。 - Mibac
6个回答

150
val strs = "name, 2012, 2017".split(",").toTypedArray()

2
这个答案不正确。Kotlin的split方法将返回一个列表而不是一个数组。 - TheHebrewHammer
4
你可以这样写:val strs = "name, 2012, 2017".split(",").toTypedArray() - JK Ly
1
Java的split方法实际上在内部使用了一个ArrayList,因此最终结果是相同的。 - alex

19

就是这么简单:

val string: String = "leo_Ana_John"
val yourArray: List<String> = string.split("_")

你得到:yourArray[0] == leo, yourArray[1] == Ana, yourArray[2]==John

在这种情况下,只需要将我的代码中的“_”改为你的“,”即可。如下所示:

    val yourArray: List<String> = string.split(", ")

17
如果我们有一个由任意字符(例如“,”)分隔的值的字符串:
 val values = "Name1 ,Name2, Name3" // Read List from somewhere
 val lstValues: List<String> = values.split(",").map { it -> it.trim() }
 lstValues.forEach { it ->
                Log.i("Values", "value=$it")
                //Do Something
            }
最好使用trim()来删除字符串周围存在的空格。请注意,如果在字符串末尾有一个“,”,它会产生一个空项,因此可以在分割之前使用此代码进行检查:
 if ( values.endsWith(",") )
     values = values.substring(0, values.length - 1)

如果您想将列表转换为数组,请使用此代码:

      var  arr = lstValues.toTypedArray()
      arr.forEach {  Log.i("ArrayItem", " Array item=" + it ) }

6
var newStrg= "853 kB"
val mString = newStrg!!.split(" ").toTypedArray()

这里的Split参数是空格

mString[0] = "853"
mString[1] = "kB"

newStrg!! 中的 !! 是不必要的。 - Marcel Bro

1

如果您想在Kotlin中使用多个分隔符split,则需要单独传递它们:

 val validUrl = "http://test.com/</a> -".split(">", " ", "<").first()

1

使用内置的split方法分割字符串,然后使用方法扩展isNum()来返回是否为数字。

fun String.isNum(): Boolean{
   var num:Int? = this.trim().toIntOrNull()
   return if (num != null) true else false
}

for (x in "name, 2012, 2017".split(",")) {
   println(x.isNum())
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接