如何将字符串中每组连续相同字母的首字母大写?
实现连续相同字符首字母大写的处理方案
给定字符串:
String s = "abbcccdddd";
需求是将每组连续相同字母的首字母转为大写,其余字母保持原小写,最终得到结果:ABbCccDddd。
以下是两种可行的实现方式:
方法一:遍历字符串逐个处理
通过遍历字符串的每个字符,对比当前字符与前一个字符是否相同,不同则将当前字符转为大写,否则保留原字符。这种方式逻辑直观,性能稳定。
public class Main { public static void main(String[] args) { String s = "abbcccdddd"; if (s.isEmpty()) { System.out.println(""); return; } StringBuilder result = new StringBuilder(); // 第一个字符直接转大写 result.append(Character.toUpperCase(s.charAt(0))); for (int i = 1; i < s.length(); i++) { char current = s.charAt(i); char prev = s.charAt(i - 1); if (current != prev) { result.append(Character.toUpperCase(current)); } else { result.append(current); } } System.out.println(result.toString()); // 输出 ABbCccDddd } }
方法二:正则表达式匹配替换
利用正则表达式匹配连续重复的字符组,对每个匹配组的首字符进行大写转换,其余字符保留原样。这种方式代码更简洁,适合偏好正则处理字符串的场景。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String s = "abbcccdddd"; // 匹配连续重复的字符组:(.)捕获第一个字符,\1*匹配后续相同的字符 Pattern pattern = Pattern.compile("(.)\\1*"); Matcher matcher = pattern.matcher(s); StringBuilder result = new StringBuilder(); while (matcher.find()) { String group = matcher.group(); // 首字符大写拼接后续字符 result.append(Character.toUpperCase(group.charAt(0))) .append(group.substring(1)); } System.out.println(result.toString()); // 输出 ABbCccDddd } }
内容的提问来源于stack exchange,提问作者user13272811
相关产品推荐
相关产品推荐

