我有下面的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"
谢谢。
要匹配单词的第一个小写字母(为了不匹配那些已经大写的字母(,可以使用bp{Ll}
regex并使用Matcher#appendReplacement()
方法来处理匹配:
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演示。
根据JavaMatcher类文档:
appendReplacement和appendTail方法可以同时使用,以便将结果收集到现有的字符串缓冲区中
因此,如果使用当前的正则表达式"\b(.)(.*?)\b"
,则需要将while (m.find())
主体替换为
m.appendReplacement(result, m.group(1).toUpperCase() + m.group(2));