如何使用indexOf()和CharAt()方法生成"B R A M"格式的缩写输出?
解决字符串转首字母缩写的问题
嘿,我来帮你搞定把"Business Requirement And Management"转成"B R A M"的需求~先看看你的原代码存在的几个问题:
- 没有处理第一个单词的首字母,导致最终结果缺失了开头的'B'
- 每次遇到空格时调用
s.indexOf(" "),这个方法只会返回第一个空格的索引,所以后面所有的空格判断都会重复取第一个空格后的'R',结果肯定不对 - 没有在缩写字母之间添加空格,最后输出的会是连在一起的字符,不符合要求的格式
下面给你两种符合要求(用到indexOf()和charAt())的修正方案:
方案一:遍历每个字符实现
public class Test { public static void main(String[] args) { String s = "Business Requirement And Management"; String shortForm = ""; // 先添加第一个单词的首字母 shortForm += s.charAt(0); int i = 0; while(i < s.length()) { if(s.charAt(i) == ' ') { // 当前i是空格位置,直接取空格后的首字母,同时加上分隔空格 shortForm += " " + s.charAt(i + 1); } i++; } System.out.println(shortForm); // 输出:B R A M } }
这个方案的关键点:
- 一开始就把第一个单词的首字母
s.charAt(0)加入结果,补上原代码缺失的部分 - 遍历到空格时,直接用当前的
i(空格的索引)获取下一个字符,避免了indexOf()只找第一个空格的问题 - 每次添加首字母前先加一个空格,保证缩写格式正确
方案二:用indexOf()定位空格实现(更高效)
如果不想遍历每个字符,可以用indexOf()不断定位下一个空格的位置,这样效率更高:
public class Test { public static void main(String[] args) { String s = "Business Requirement And Management"; StringBuilder shortForm = new StringBuilder(); // 添加第一个单词的首字母 shortForm.append(s.charAt(0)); int spaceIndex = s.indexOf(" "); // 当找到空格时继续循环,直到indexOf返回-1(没有更多空格) while(spaceIndex != -1) { // 取空格后的首字母,加上分隔空格 shortForm.append(" ").append(s.charAt(spaceIndex + 1)); // 从当前空格的下一个位置开始找下一个空格 spaceIndex = s.indexOf(" ", spaceIndex + 1); } System.out.println(shortForm.toString()); // 输出:B R A M } }
这个方案的关键点:
- 用
indexOf(" ")找到第一个空格,之后每次用indexOf(" ", spaceIndex + 1)定位下一个空格,避免重复查找 - 使用
StringBuilder拼接字符串比直接用+=更高效,尤其是处理长字符串时 - 同样确保了每个首字母之间有空格分隔,格式完全符合要求
内容的提问来源于stack exchange,提问作者Shinghim LEE
相关产品推荐
相关产品推荐

