如何将字符串中每个单词的第一个字母都大写 | Java Debug 笔记

131 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

问题

Java 中是否内置了一个函数,该函数可以大写字符串中每个单词的第一个字符,而不会影响其他单词?

例如:

  • jon skeet -> Jon Skeet
  • miles o'Brien -> Miles O'Brien(B仍然是大写字母)
  • old mcdonald -> Old Mcdonald*

(Old McDonald也可以找到,但我不认为它会那么聪明。)

快速浏览一下 Java String Documentation 只会发现toUpperCase()和toLowerCase(),当然它们并不能提供所需的行为。自然,这两个函数在Google搜索结果中占主导地位。似乎必须已经发明了一个轮子,所以问这个问题不会有任何伤害,因此我将来可以使用它。

回答

回答1

使用 WordUtils.capitalize(str) ,来自于 apache commons-text

(注:如果需要将 fOO BAr 变为 Foo Bar, 可以使用 capitalizeFully(..))

回答2

下面的方法根据所有字母在空格或其他特殊字符附近的位置将其转换为大写/小写。

public static String capitalizeString(String string) {
  char[] chars = string.toLowerCase().toCharArray();
  boolean found = false;
  for (int i = 0; i < chars.length; i++) {
    if (!found && Character.isLetter(chars[i])) {
      chars[i] = Character.toUpperCase(chars[i]);
      found = true;
    } else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here
      found = false;
    }
  }
  return String.valueOf(chars);
}

回答3

试试这个非常简单的方法

示例 namedString =“ram is good boy”

public static String toTitleCase(String givenString) {
    String[] arr = givenString.split(" ");
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < arr.length; i++) {
        sb.append(Character.toUpperCase(arr[i].charAt(0)))
            .append(arr[i].substring(1)).append(" ");
    }          
    return sb.toString().trim();
}

输出将是:Ram Is Good Boy

翻译内容来源Stack Overflow:stackoverflow.com/questions/1…