Java首字母缩写(acronym)生成问题:过滤非单词首字母大写字符
解决首字母缩写提取错误的问题
你的代码目前的问题是把所有空格移除后,无法区分单词边界,导致单词内部的大写字母(比如COOL里的O、O、L)也被当作首字母提取了。正确的思路应该是按单词分割短语,只取每个单词的首字母。
修改方案
步骤说明
- 将输入短语按空格分割成单词数组(用
split("\\s+")可以处理多个连续空格的情况) - 遍历每个单词:
- 跳过空字符串(处理首尾空格的情况)
- 提取单词的第一个字符,转换为大写(确保即使单词首字母是小写也能正确提取)
- 将该大写字符添加到缩写中
- 最后给缩写加上结尾的点,匹配你期望的输出格式
修改后的完整代码
import java.util.Scanner; public class LabProgram { public static String createAcronym(String userPhrase) { // 按一个或多个空格分割成单词数组 String[] words = userPhrase.split("\\s+"); StringBuilder acronym = new StringBuilder(); for (String word : words) { if (!word.isEmpty()) { // 取第一个字符并转大写 char firstChar = Character.toUpperCase(word.charAt(0)); acronym.append(firstChar); } } // 最后添加一个点,符合你期望的输出格式 return acronym.append(".").toString(); } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); String userPhrase = scnr.nextLine(); System.out.println(createAcronym(userPhrase)); } }
测试验证
输入Awesome COOL Crazy时,代码会:
- 分割得到
["Awesome", "COOL", "Crazy"]三个单词 - 分别提取每个单词的首字母
A、C、C - 拼接后添加点,输出
ACC.,完全符合你的期望。
另外这里用StringBuilder代替了字符串直接拼接,效率更高(Java中字符串是不可变对象,多次拼接会产生冗余对象),适合新手养成良好的编程习惯。
内容的提问来源于stack exchange,提问作者Amanda Brown
相关产品推荐
相关产品推荐

