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

我已经跟随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"

谢谢。


aluckdog
浏览 149回答 1
1回答

犯罪嫌疑人X

要匹配第一个小写字母的单词(为了不匹配已经大写的单词),可以使用\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));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java