【问题标题】:Kotlin - How to split the string into digits and string?Kotlin - 如何将字符串拆分为数字和字符串?
【发布时间】:2021-11-29 14:43:22
【问题描述】:

我想在 Kotlin 中将一个长字符串(包含数字和字符)拆分成不同的子字符串?

例如:- 购买这 2 种产品并获得 100 折

需要输出 -> "购买这些 ","2 ","产品并获得 ","100 ","off"

【问题讨论】:

  • 这看起来像是 CSV 文件中的一行。如果是这样,通常最好使用现有的库来解析它——不仅您不必使用正则表达式或其他任何东西,而且该库将处理嵌套引号、转义字符、cmets、特定于语言环境的分隔符等等您没有想到的其他变体、极端情况和并发症。 (例如,Apache Commons CSV 是免费和开源的。)
  • 我更喜欢使用@Sam 的回答
  • 也是@Alireza Mahfouzian 的答案

标签: arrays string kotlin split


【解决方案1】:

使用将匹配一组数字或一组非数字字符的正则表达式。

我使用了\d+|\D+

  • \d+ 将匹配数字组,例如 2100
  • \D+ 将匹配任何不包含数字的字符序列
  • | 表示模式应该匹配 either \d+ or \D+

使用findAll 查找字符串中与模式匹配的每一部分。

val regex = Regex("""\d+|\D+""")
val input = "Buy these 2 products and get 100 off"
val result = regex.findAll(input).map { it.groupValues.first() }.toList()

我得到的结果是:

["Buy these ", "2", " products and get ", "100", " off"]

间距与您要查找的不完全相同,因此您可以修剪结果,或调整正则表达式模式。

【讨论】:

    【解决方案2】:

    这段代码在这个例子中也很好用:

    val str = "Buy these 2 products and get 100 off"
    val result = str.split(regex = Regex("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多