为了账号安全,请及时绑定邮箱和手机立即绑定

使用Java RegEx全局替换分组的匹配项

使用Java RegEx全局替换分组的匹配项

aluckdog 2021-05-21 15:02:00
我已经跟随PERL一线。该Perl RegEx只是将给定句子的所有单词的首字母大写。$val =~ s/\b(.)(.*?)\b/uc($1).$2/eg;输入:"united states corp"输出"United States Corp"但是,我需要在JAVA中实现相同的功能。我正在关注。String INPUT="united states corp"Pattern p = Pattern.compile("\\b(.)(.*?)\\b");Matcher m = p.matcher(INPUT);if (m.find()) {    INPUT = m.replaceAll(m.group(1).toUpperCase() + m.group(2));}输入:"United States Corp".输出:"UnitedUnitedUnitedUnitedUnited"谢谢。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

要匹配第一个小写字母的单词(为了不匹配已经大写的单词),可以使用\b\p{Ll}regex并使用Matcher#appendReplacement()method来操作匹配:


String INPUT="united states corp";

Pattern p = Pattern.compile("\\b\\p{Ll}");

StringBuffer result = new StringBuffer();

Matcher m = p.matcher(INPUT);

while (m.find()) {

    m.appendReplacement(result, m.group().toUpperCase());

}

m.appendTail(result);

System.out.println(result.toString()); // => United States Corp

参见Java演示。


根据Java Matcher类文档:


的appendReplacement和appendTail方法可以串联使用,以便收集的结果到一个现有的字符串缓冲区


因此,如果您使用当前的正则表达式,"\\b(.)(.*?)\\b"则需要将while (m.find())主体替换为


m.appendReplacement(result, m.group(1).toUpperCase() + m.group(2));


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信