You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中字符串句号替换为换行符失效的解决求助

问题解决:Kotlin中替换句号为换行符

核心问题

你当前的代码使用了字符串字面量版本的replace方法,它不会将第一个参数解析为正则表达式,导致匹配逻辑失效。要实现正则替换,必须使用支持正则的重载方法。

修正方案

方案1:使用Regex对象

val input = meal.directions
val formattedDirections = input.replace(Regex("\\.\\s?"), ".\n")

方案2:将字符串转为Regex对象

val input = meal.directions
val formattedDirections = input.replace("""\.\s?""".toRegex(), ".\n")

额外优化:统一处理原有换行符

原文本中存在\r\n格式的换行,可先统一转换为标准换行再处理:

val input = meal.directions.replace("\r\n", "\n")
val formattedDirections = input.replace(Regex("\\.\\s?"), ".\n")

原理说明

  • Kotlin的String.replace(String, String)是字面量匹配替换,会把你传入的"\\.\\s?"当作普通字符串(即匹配\.\s?这几个字符),而非正则表达式,因此无法匹配到实际的句号加空格。
  • 只有通过Regex类或toRegex()方法将字符串转为正则表达式对象,才能让\.\s?的正则逻辑生效(匹配句号后跟可选空白字符)。

非正则替代方案

如果不想使用正则,也可以通过遍历字符串手动处理:

val input = meal.directions.replace("\r\n", "\n")
val sb = StringBuilder()
input.forEachIndexed { index, c ->
    sb.append(c)
    when {
        c == '.' && index < input.length - 1 && input[index + 1].isWhitespace() -> sb.append('\n')
        c == '.' && index == input.length - 1 -> sb.append('\n')
    }
}
val formattedDirections = sb.toString()

内容的提问来源于stack exchange,提问作者Tonnie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:45:58