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

如何获取replaceAll()替换后所有空格后的首字母?

解决方案

方法一:直接处理原字符串(推荐)

不用先替换下划线,直接定位原字符串中所有_的位置,取每个_的下一个字符即可,这种方式精准且高效,不会受原字符串中已有空格的干扰:

String original = "hi_my name is_reza";
List<Character> targetChars = new ArrayList<>();

for (int i = 0; i < original.length() - 1; i++) {
    if (original.charAt(i) == '_') {
        targetChars.add(original.charAt(i + 1));
    }
}

// 输出结果:[m, r]
System.out.println(targetChars);
// 单独访问目标字符
char m = targetChars.get(0);
char r = targetChars.get(1);

方法二:基于替换后的字符串处理

如果必须先完成下划线转空格的操作,可以先记录原字符串中所有_的位置,替换后对应位置的空格后续字符就是目标:

String original = "hi_my name is_reza";
String replaced = original.replaceAll("_", " ");
List<Character> targetChars = new ArrayList<>();

for (int i = 0; i < original.length() - 1; i++) {
    if (original.charAt(i) == '_') {
        targetChars.add(replaced.charAt(i + 1));
    }
}

// 同样得到结果:[m, r]
System.out.println(targetChars);

关于split()和indexOf()的局限

  • split("_")虽然能分割出下划线后的子串,但如果子串本身包含空格(比如示例中的my name is),虽然能拿到首字符,但遇到下划线后带空格的场景(比如hi_ reza)会出错;且批量处理需要遍历分割数组,不如直接遍历原字符串精准。
  • 单次indexOf("_")只能定位第一个下划线,要覆盖所有情况需要循环调用,从上次找到的位置+1开始重新查找,之前没做循环处理才会只能覆盖单个场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:12:44