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

例子:

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

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

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


当前回答

最基本和最简单的理解方法(我认为):

import java.util.Scanner;

public class ToUpperCase {
    static Scanner kb = new Scanner(System.in);

    public static String capitalize(String str){
        /* Changes 1st letter of every word 
           in a string to upper case
         */
        String[] ss = str.split(" ");
        StringBuilder[] sb = new StringBuilder[ss.length];
        StringBuilder capped = new StringBuilder("");
        str = "";

        // Capitalise letters
        for (int i = 0; i < ss.length; i++){
            sb[i] = new StringBuilder(ss[i]); // Construct and assign
            str += Character.toUpperCase(ss[i].charAt(0)); // Only caps
            //======================================================//

            // Replace 1st letters with cap letters
            sb[i].setCharAt(0, str.charAt(i)); 
            capped.append(sb[i].toString() + " ");  // Formatting
        }
        return capped.toString();
    }

    public static void main(String[] args){
        System.out.println(capitalize(kb.nextLine()));
    }
}

其他回答

如果你只担心第一个单词的首字母大写:

private String capitalize(final String line) {
   return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}

试试这个非常简单的方法

示例givenString="ram是好孩子"

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

输出将是:公羊是好孩子

public static void main(String[] args) throws IOException {
    String words = "this is a test";

    System.out.println(Arrays.asList(words.split(" ")).stream().reduce("",(a, b)->(a + " " + b.substring(0, 1).toUpperCase() + b.substring(1))));


}

}

    s.toLowerCase().trim();
    result += Character.toUpperCase(s.charAt(0));
    result += s.substring(1, s.indexOf(" ") + 1);
    s = s.substring(s.indexOf(" ") + 1);

    do {
        if (s.contains(" ")) {
            result += " ";
            result += Character.toUpperCase(s.charAt(0));
            result += s.substring(1, s.indexOf(" "));
            s = s.substring(s.indexOf(" ") + 1);
        } else {
            result += " ";
            result += Character.toUpperCase(s.charAt(0));
            result += s.substring(1);
            break;
        }
    } while (true);
    System.out.println(result);

这里是一个lil程序,我是用来大写每个第一个字母单词在每个子文件夹的父目录。

private void capitalize(String string)
{
    List<String> delimiters = new ArrayList<>();
    delimiters.add(" ");
    delimiters.add("_");

    File folder = new File(string);
    String name = folder.getName();
    String[] characters = name.split("");

    String newName = "";
    boolean capitalizeNext = false;

    for (int i = 0; i < characters.length; i++)
    {
        String character = characters[i];

        if (capitalizeNext || i == 0)
        {
            newName += character.toUpperCase();
            capitalizeNext = false;
        }
        else
        {
            if (delimiters.contains(character)) capitalizeNext = true;
            newName += character;
        }
    }

    folder.renameTo(new File(folder.getParent() + File.separator + newName));
}