如何获取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
相关产品推荐
相关产品推荐

