如果字符串以Java中的特殊字符开头,如何将首字母大写?

时间:2018-02-28 16:19:30

标签: java regex string

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函数的正则表达式?

2 个答案:

答案 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/PatternappendReplacement

正则表达式(?:^| )[^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

Code demo