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

例子:

乔恩·斯基特->乔恩·斯基特 miles o'Brien -> miles o'Brien (B仍然是大写,这排除了Title Case) 老麦当劳->

*(老麦当劳也会被发现,但我不指望它有那么聪明。)

快速浏览一下Java字符串文档就会发现只有toUpperCase()和toLowerCase(),它们当然没有提供所需的行为。当然,谷歌的结果主要是这两个函数。它看起来像一个已经被发明出来的轮子,所以问一下也无妨,这样我以后就可以用它了。


当前回答

对于那些在MVC中使用Velocity的人,你可以使用StringUtils类中的capitalizeFirstLetter()方法。

其他回答

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());
}

//如此简单和基本

public void capalizedFirstCharOne(String str){
    char[] charArray=str.toCharArray();
    charArray[0]=Character.toUpperCase(charArray[0]);
    for(int i=1;i<charArray.length;i++){
        if(charArray[i]==' ' ){
            charArray[i+1]=Character.toUpperCase(charArray[i+1]);
        }
    }

    String result=new String(charArray);
    System.out.println(result);
}

这是我做的另一种方法

    StringBuilder str=new StringBuilder("pirai sudie test test");

    str.setCharAt(0,Character.toUpperCase(str.charAt(0)));

    for(int i=str.length()-1;i>=0;i--)
    {
        if(Character.isSpaceChar(str.charAt(i)))
            str.setCharAt(i+1,Character.toUpperCase(str.charAt(i+1)));
    }

    System.out.println(str);

您也可以非常简单地这样做,并保留任何双空格、前导空格和尾随空格

public static String capitalizeWords(String text) {

    StringBuilder sb = new StringBuilder();
    if(text.length()>0){
        sb.append(Character.toUpperCase(text.charAt(0)));
    }
    for (int i=1; i<text.length(); i++){
        String chPrev = String.valueOf(text.charAt(i-1));
        String ch = String.valueOf(text.charAt(i));

        if(Objects.equals(chPrev, " ")){
            sb.append(ch.toUpperCase());
        }else {
            sb.append(ch);
        }

    }

    return sb.toString();

}

worddutil .capitalize(str) (from apache common -text)

(注意:如果你需要“fOO BAr”变成“fOO BAr”,那么用大写的(..)代替)