我具有此功能,可以将字符串句子转换为列表词。我使用Java创建了此函数,并使用Android Studio中的默认Kotlin转换将其转换为Kotlin,但我相信可以通过许多方法来缩短Awesome Kotlin中的这段代码。如果您可以共享您的代码并帮助我(以及所有人)提高我们对Kotlin的了解,我会很好。
private fun stringToWords(mnemonic: String): List<String> {
val words = ArrayList<String>()
for (word in mnemonic.trim { it <= ' ' }.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()) {
if (word.isNotEmpty()) {
words.add(word)
}
}
return words
}
答案 0 :(得分:5)
我会去做以下事情:
fun stringToWords(s : String) = s.trim().splitToSequence(' ')
.filter { it.isNotEmpty() } // or: .filter { it.isNotBlank() }
.toList()
请注意,您可能要调整该过滤器,例如也可以过滤出空白条目...我在注释中添加了该变体...(如果您使用该变体,则虽然不需要初始的trim()
)
如果您想使用Sequence
,可以通过在末尾省略.toList()
来实现。
正如Abdul-Aziz-Niazi所说:如果您更频繁地使用扩展功能,也可以通过扩展功能实现:
fun String.toWords() = trim().splitToSequence(' ').filter { it.isNotEmpty() }.toList()
答案 1 :(得分:3)
比您想象的要容易:
fun stringToWords(mnemonic: String) = mnemonic.replace("\\s+".toRegex(), " ").trim().split(" ")
删除多个空格,修剪开始和结尾,拆分。
像扩展一样:
fun String.toWords() = replace("\\s+".toRegex(), " ").trim().split(" ")
在罗兰的建议之后:
fun String.toWords() = trim().split("\\s+".toRegex())
答案 2 :(得分:2)
您可以这样做。.只需创建返回类型列表的函数即可。
val s = "This is a sample sentence."
val words:Array<String> = s.split("\\s+".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
for (i in words.indices) {
// You may want to check for a non-word character before blindly
// performing a replacement
// It may also be necessary to adjust the character class
words[i] = words[i].replace("[^\\w]".toRegex(), "")
}
愿这对您有帮助:-)
答案 3 :(得分:1)
您不需要范围,多余的"".toRegex()
和最后一个表达式。
您可以执行以下操作:
private fun stringToWords(mnemonic: String): List<String> {
val words = ArrayList<String>()
for (w in mnemonic.trim(' ').split(" ")) {
if (w.isNotEmpty()) {
words.add(w)
}
}
return words
}
另外,
如果在项目中经常使用此方法,则可以将其作为字符串类的扩展。将此方法粘贴到单独的文件中(在类外部或将其添加到无类.kt文件中),以便可以全局访问。
然后您可以将其与任何字符串一起使用
myString.toWords()
在项目中的任何地方
该方法将如下所示
inline fun String.toWords(): List<String> {
val words = ArrayList<String>()
for (w in this.trim(' ').split(" ")) {
if (w.isNotEmpty()) {
words.add(w)
}
}
return words
}