How to capitalize the first character of each word

2018-12-31 05:39发布

Is there a function built into Java that capitalizes the first character of each word in a String, and does not affect the others?

Examples:

  • jon skeet -> Jon Skeet
  • miles o'Brien -> Miles O'Brien (B remains capital, this rules out Title Case)
  • old mcdonald -> Old Mcdonald*

*(Old McDonald would be find too, but I don't expect it to be THAT smart.)

A quick look at the Java String Documentation reveals only toUpperCase() and toLowerCase(), which of course do not provide the desired behavior. Naturally, Google results are dominated by those two functions. It seems like a wheel that must have been invented already, so it couldn't hurt to ask so I can use it in the future.

30条回答
看淡一切
2楼-- · 2018-12-31 06:21

This is just another way of doing it:

private String capitalize(String line)
{
    StringTokenizer token =new StringTokenizer(line);
    String CapLine="";
    while(token.hasMoreTokens())
    {
        String tok = token.nextToken().toString();
        CapLine += Character.toUpperCase(tok.charAt(0))+ tok.substring(1)+" ";        
    }
    return CapLine.substring(0,CapLine.length()-1);
}
查看更多
路过你的时光
3楼-- · 2018-12-31 06:22

From Java 9+

you can use String::replceAll like this :

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

Example :

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

Outputs

Hello This Is Just A Test
查看更多
皆成旧梦
4楼-- · 2018-12-31 06:23

Here is a simple function

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();
}
查看更多
裙下三千臣
5楼-- · 2018-12-31 06:24
String s="hi dude i                                 want apple";
    s = s.replaceAll("\\s+"," ");
    String[] split = s.split(" ");
    s="";
    for (int i = 0; i < split.length; i++) {
        split[i]=Character.toUpperCase(split[i].charAt(0))+split[i].substring(1);
        s+=split[i]+" ";
        System.out.println(split[i]);
    }
    System.out.println(s);
查看更多
浅入江南
6楼-- · 2018-12-31 06:24

I made a solution in Java 8 that is IMHO more readable.

public String firstLetterCapitalWithSingleSpace(final String words) {
    return Stream.of(words.trim().split("\\s"))
    .filter(word -> word.length() > 0)
    .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1))
    .collect(Collectors.joining(" "));
}

The Gist for this solution can be found here: https://gist.github.com/Hylke1982/166a792313c5e2df9d31

查看更多
孤独总比滥情好
7楼-- · 2018-12-31 06:25

For those of you using Velocity in your MVC, you can use the capitalizeFirstLetter() method from the StringUtils class.

查看更多
登录 后发表回答