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

Android Studio Kotlin 如何正确检测字符串空格并按条件替换为下划线

问题解决:仅替换后接字母的空格为下划线

你现有代码存在两个核心问题:

  1. 直接遍历单个字符无法获取当前空格的后续字符信息,没办法判断是否符合替换条件
  2. 循环内直接调用全量replace方法会替换所有匹配的空格,完全失去了条件判断的意义

方案1:正则表达式实现(最简洁)

用正则的正向肯定预查特性,匹配后面紧跟字母的空格,直接替换即可,一行代码就能完成需求:

Kotlin 版本

userName = userName.replace("\\s(?=[a-zA-Z])".toRegex(), "_")

JavaScript 版本

userName = userName.replace(/\s(?=[a-zA-Z])/g, '_')

正则逻辑说明:

  • \s 匹配空格字符
  • (?=[a-zA-Z]) 正向肯定预查,仅当当前空格的后一个字符是大小写字母时,才会把前面的空格纳入替换范围
  • 不会修改空格后方的字母,仅替换符合条件的空格本身

方案2:手动遍历实现(无需正则知识)

如果想要手动实现逻辑,需要按索引遍历字符串,同时判断后续字符属性,避免直接修改原字符串导致索引错乱:

val result = StringBuilder()
// 按索引遍历每个字符
for (i in userName.indices) {
    val currentChar = userName[i]
    // 替换条件:当前是空格 且 不是最后一个字符 且 下一个字符是字母
    if (currentChar == ' ' && i < userName.length - 1 && userName[i+1].isLetter()) {
        result.append('_')
    } else {
        result.append(currentChar)
    }
}
userName = result.toString()

效果示例

输入:"admin 123 test user "
输出:"admin 123 test_user "

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:45:03