如何大写字符串中每个单词的第一个字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何大写字符串中每个单词的第一个字符相关的知识,希望对你有一定的参考价值。

是否有一个内置于Java中的函数可以将String中每个单词的第一个字符大写,而不影响其他单词?

例子:

  • jon skeet - > Jon Skeet
  • miles o'Brien - > Miles O'Brien(B仍然是资本,这排除了标题案例)
  • old mcdonald - > Old Mcdonald *

*(Old McDonald也会被发现,但我不认为它会那么聪明。)

快速浏览一下Java String Documentation只显示toUpperCase()toLowerCase(),这当然不能提供所需的行为。当然,谷歌的结果由这两个功能主导。它看起来像一个必须已经发明的轮子,所以它可以不会受到伤害,所以我可以在将来使用它。

答案

WordUtils.capitalize(str)(来自apache commons-text

(注意:如果你需要"fOO BAr"成为"Foo Bar",那么使用capitalizeFully(..)代替)

另一答案

我正在使用以下功能。我认为它的性能更快。

public static String capitalize(String text){
    String c = (text != null)? text.trim() : "";
    String[] words = c.split(" ");
    String result = "";
    for(String w : words){
        result += (w.length() > 1? w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1, w.length()).toLowerCase(Locale.US) : w) + " ";
    }
    return result.trim();
}
另一答案

使用Split方法将字符串拆分为单词,然后使用内置字符串函数将每个单词大写,然后一起追加。

伪代码(ish)

string = "the sentence you want to apply caps to";
words = string.split(" ") 
string = ""
for(String w: words)

//This line is an easy way to capitalize a word
    word = word.toUpperCase().replace(word.substring(1), word.substring(1).toLowerCase())

    string += word

最后字符串看起来像“你要申请上限的句子

另一答案

如果您需要大写标题,这可能很有用。它将" "分隔的每个子字符串大写,除了指定的字符串,如"a""the"。我还没有跑,因为它已经晚了,但应该没问题。在某一点上使用Apache Commons StringUtils.join()。如果您愿意,可以用简单的循环替换它。

private static String capitalize(String string) {
    if (string == null) return null;
    String[] wordArray = string.split(" "); // Split string to analyze word by word.
    int i = 0;
lowercase:
    for (String word : wordArray) {
        if (word != wordArray[0]) { // First word always in capital
            String [] lowercaseWords = {"a", "an", "as", "and", "although", "at", "because", "but", "by", "for", "in", "nor", "of", "on", "or", "so", "the", "to", "up", "yet"};
            for (String word2 : lowercaseWords) {
                if (word.equals(word2)) {
                    wordArray[i] = word;
                    i++;
                    continue lowercase;
                }
            }
        }
        char[] characterArray = word.toCharArray();
        characterArray[0] = Character.toTitleCase(characterArray[0]);
        wordArray[i] = new String(characterArray);
        i++;
    }
    return StringUtils.join(wordArray, " "); // Re-join string
}
另一答案
public static String toTitleCase(String word){
    return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}

public static void main(String[] args){
    String phrase = "this is to be title cased";
    String[] splitPhrase = phrase.split(" ");
    String result = "";

    for(String word: splitPhrase){
        result += toTitleCase(word) + " ";
    }
    System.out.println(result.trim());
}
另一答案

From Java 9+

你可以像这样使用String::replceAll

public static void upperCaseAllFirstCharacter(String text) {
    String regex = "\\b(.)(.*?)\\b";
    String result = Pattern.compile(regex).matcher(text).replaceAll(
            matche -> matche.group(1).toUpperCase() + matche.group(2)
    );

    System.out.println(result);
}

示例:

upperCaseAllFirstCharacter("hello this is Just a test");

输出

Hello This Is Just A Test
另一答案
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   

System.out.println("Enter the sentence : ");

try
{
    String str = br.readLine();
    char[] str1 = new char[str.length()];

    for(int i=0; i<str.length(); i++)
    {
        str1[i] = Character.toLowerCase(str.charAt(i));
    }

    str1[0] = Character.toUpperCase(str1[0]);
    for(int i=0;i<str.length();i++)
    {
        if(str1[i] == ' ')
        {                   
            str1[i+1] =  Character.toUpperCase(str1[i+1]);
        }
        System.out.print(str1[i]);
    }
}
catch(Exception e)
{
    System.err.println("Error: " + e.getMessage());
}
另一答案

这是一个简单的功能

public static String capEachWord(String source){
    String result = "";
    String[] splitString = source.split(" ");
    for(String target : splitString){
        result += Character.toUpperCase(target.charAt(0))
                + target.substring(1) + " ";
    }
    return result.trim();
}
另一答案

我决定再添加一个解决方案来大写字符串中的单词:

  • 这里的单词定义为相邻的字母或数字字符;
  • 也提供代理对;
  • 代码已针对性能进行了优化;和
  • 它仍然紧凑。

功能:

public static String capitalize(String string) {
  final int sl = string.length();
  final StringBuilder sb = new StringBuilder(sl);
  boolean lod = false;
  for(int s = 0; s < sl; s++) {
    final int cp = string.codePointAt(s);
    sb.appendCodePoint(lod ? Character.toLowerCase(cp) : Character.toUpperCase(cp));
    lod = Character.isLetterOrDigit(cp);
    if(!Character.isBmpCodePoint(cp)) s++;
  }
  return sb.toString();
}

示例电话:

System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: 

以上是关于如何大写字符串中每个单词的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中将字符串的每个单词的第一个字符大写? [复制]

Java如何将每个单词的第一个字符转为大写

PHP - 大写每个单词的第一个字符,除了某些单词

我看书JavaScript将每个单词首字母变大写

尝试使用 forEach 将单词的第一个字符大写 [重复]

如何把一个字符串里的所有单词的第一个字符变大写?