public static void main(String [] args) {
String patternString = "\"[^a-zA-Z\\s]]+\"";
String s = WordUtils.capitalizeFully("*tried string", patternString.toCharArray());
System.out.println(s);
}
我想把每个单词的第一个字母大写。我使用WordUtils
函数。我的字符串有特殊字符,如'*'
, - 等。如何使用带有capitalizeFully
函数的正则表达式?
答案 0 :(得分:3)
尝试使用WordUtils.capitalize
函数,将String
中的每个单词的首字母大写。
commons-lang lib中的
WordUtils
不是已弃用。
使用Java自定义函数的其他方式:
public String upperCaseWords(String sentence) {
String words[] = sentence.replaceAll("\\s+", " ").trim().split(" ");
StringBuffer newSentence = new StringBuffer();
int i =0;
int size = words.length;
for (String word : words) {
newSentence.append(StringUtils.capitalize(word));
i++;
if(i<size){
newSentence.append(" "); // add space
}
}
return newSentence.toString();
}
答案 1 :(得分:3)
您可以使用Mather/Pattern
和appendReplacement
。
正则表达式:(?:^| )[^a-z]*[a-z]
详细说明:
(?:^| )
非捕获组,匹配^
(断言行开头的位置)或 ' '
(空格)[^a-z]*
在零和无限次之间匹配任何非小写字符[a-z]
匹配任何小写字词Java代码:
String input = "*tried string".toLowerCase();
Matcher matcher = Pattern.compile("(?:^| )[^a-z]*[a-z]").matcher(input);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(result, matcher.group().toUpperCase());
}
matcher.appendTail(result);
输出:
*Tried String