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

例子:

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

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

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


当前回答

这是我的解决方案。

今晚我偶然发现了这个问题,并决定研究一下。我发现Neelam Singh的答案几乎在那里,所以我决定解决这个问题(断在空字符串上),导致系统崩溃。

您正在寻找的方法名为capString(String s)。 它把“这里才早上5点”变成了“这里才早上5点”。

代码注释得很好,喜欢吧。

package com.lincolnwdaniel.interactivestory.model;

    public class StringS {

    /**
     * @param s is a string of any length, ideally only one word
     * @return a capitalized string.
     * only the first letter of the string is made to uppercase
     */
    public static String capSingleWord(String s) {
        if(s.isEmpty() || s.length()<2) {
            return Character.toUpperCase(s.charAt(0))+"";
        } 
        else {
            return Character.toUpperCase(s.charAt(0)) + s.substring(1);
        }
    }

    /**
     *
     * @param s is a string of any length
     * @return a title cased string.
     * All first letter of each word is made to uppercase
     */
    public static String capString(String s) {
        // Check if the string is empty, if it is, return it immediately
        if(s.isEmpty()){
            return s;
        }

        // Split string on space and create array of words
        String[] arr = s.split(" ");
        // Create a string buffer to hold the new capitalized string
        StringBuffer sb = new StringBuffer();

        // Check if the array is empty (would be caused by the passage of s as an empty string [i.g "" or " "],
        // If it is, return the original string immediately
        if( arr.length < 1 ){
            return s;
        }

        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 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 void capitaliseFirstLetterOfEachWord()
{
    String value="this will capitalise first character of each word of this string";
    String[] wordSplit=value.split(" ");
    StringBuilder sb=new StringBuilder();

    for (int i=0;i<wordSplit.length;i++){

        sb.append(wordSplit[i].substring(0,1).toUpperCase().
                concat(wordSplit[i].substring(1)).concat(" "));
    }
    System.out.println(sb);
}

我做了这个小类,可以用来大写一个句子中的每个单词。如果不是空格,可以更改字符串中的单词分隔符。

package com.ecnews.ecnews_v01.Helpers;

  public class Capitalize {

  String sentence;
  String separator = " ";

  public Capitalize(String sentence) {
    this.sentence = sentence;
  }

  public void setSeparator(String separator) {
    this.separator = separator;
  }

  public String getCapitalized() {
    StringBuilder capitalized = new StringBuilder("");
    for (String word : sentence.split(separator)) {
        capitalized.append(separator+Character.toUpperCase(word.charAt(0)) + word.substring(1));
    }
    return capitalized.toString().trim();
  }

}

例子:

String sourceName = new Capitalize("this is a test"). get资本化();

sourceName将是“This Is A Test”

Simple answer by program:


public class StringCamelCase {
    public static void main(String[] args) {
        String[] articles = {"the ", "a ", "one ", "some ", "any "};
        String[] result = new String[articles.length];
        int i = 0;
        for (String string : articles) {
            result[i++] = toUpercaseForstChar(string);
        }

        for (String string : result) {
            System.out.println(string);
        }
    }
    public static String toUpercaseForstChar(String string){
        return new String(new char[]{string.charAt(0)}).toUpperCase() + string.substring(1,string.length());
    }
}

这里是一个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));
}