如何使用Java 8 Stream实现除"or"外单词首字母大写并拼接字符串?
Java 8 Stream实现单词首字母大写(排除指定单词)
当然有简便的方案!而且刚好能解决你提到的拆分后无法还原原始字符串的问题——核心就是用Collectors.joining()来完成流元素的拼接。我直接给你完整的实现代码,再一步步解释细节:
完整实现代码
import java.util.Arrays; import java.util.stream.Collectors; public class WordCapitalizer { public static void main(String[] args) { String input = "Taxi or bus driver"; String processedString = Arrays.stream(input.split(" ")) // 对每个单词进行处理 .map(word -> { // 排除"or",直接返回原单词 if ("or".equals(word)) { return word; } // 首字母大写,其余字母保持原大小写(如果需要统一小写可以用word.substring(1).toLowerCase()) return word.substring(0, 1).toUpperCase() + word.substring(1); }) // 用空格拼接所有处理后的单词,还原成原始格式 .collect(Collectors.joining(" ")); System.out.println(processedString); // 输出: Taxi or Bus Driver } }
关键细节说明
拆分字符串为流:
这里用Arrays.stream(input.split(" "))把字符串按空格拆分成单词流,如果你需要处理更复杂的分隔符(比如多个空格、制表符),可以改用Pattern.compile("\\s+").splitAsStream(input),效果一致且更鲁棒。处理单个单词:
- 用
map()操作遍历每个单词,判断是否是需要排除的"or",如果是直接返回原单词; - 对于其他单词,通过
substring(0,1).toUpperCase()把首字母转大写,再拼接上原单词的剩余部分。如果你希望除首字母外其他字母统一小写,把word.substring(1)改成word.substring(1).toLowerCase()即可。
- 用
拼接还原字符串:
这正是你之前卡住的地方!用Collectors.joining(" ")可以把流中的所有单词用空格连接起来,完美还原成你需要的格式,再也不用手动拼接啦。
扩展优化
如果需要忽略"or"的大小写(比如输入中的"OR"或"Or"也不处理),只需要把判断条件改成"or".equalsIgnoreCase(word)就行,这样无论"or"是什么大小写,都会被排除处理。
内容的提问来源于stack exchange,提问作者Philip Puthenvila
相关产品推荐
相关产品推荐

