字符串转换为Title Case

95 java string title-case

是否有任何内置方法可以将字符串转换为Title Case格式?

abe*_*t80 99

Apache Commons StringUtils.capitalize()WordUtils.capitalize()

例如:WordUtils.capitalize("i am FINE") = "I Am FINE"来自WordUtils doc

  • +1用于建议使用库.常识统治一次.但是,我建议使用WordUtils而不是StringUtils,它有一套更灵活的选项. (16认同)
  • WordUtils.capitalizeFully()对我来说更好,因为它给出了:WordUtils.capitalizeFully("我很精细")="我很好" (11认同)
  • 链接到WordUtils:http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/WordUtils.html#capitalize%28java.lang.String%29 (8认同)
  • 只是一个小更新,WordUtils 已转到 Commons Text 并在 Commons Lang 中弃用 (2认同)
  • Spring也有`StringUtils.capitalise()` (2认同)

dfa*_*dfa 58

String类中没有capitalize()或titleCase()方法.你有两个选择:

 StringUtils.capitalize(null)  = null
 StringUtils.capitalize("")    = ""
 StringUtils.capitalize("cat") = "Cat"
 StringUtils.capitalize("cAt") = "CAt"
 StringUtils.capitalize("'cat'") = "'cat'"
Run Code Online (Sandbox Code Playgroud)
  • 写(又一个)静态辅助方法toTitleCase()

示例实施

public static String toTitleCase(String input) {
    StringBuilder titleCase = new StringBuilder(input.lenght());
    boolean nextTitleCase = true;

    for (char c : input.toCharArray()) {
        if (Character.isSpaceChar(c)) {
            nextTitleCase = true;
        } else if (nextTitleCase) {
            c = Character.toTitleCase(c);
            nextTitleCase = false;
        }

        titleCase.append(c);
    }

    return titleCase.toString();
}
Run Code Online (Sandbox Code Playgroud)

测试用例

    System.out.println(toTitleCase("string"));
    System.out.println(toTitleCase("another string"));
    System.out.println(toTitleCase("YET ANOTHER STRING"));
Run Code Online (Sandbox Code Playgroud)

输出:

String
Another String
YET ANOTHER STRING

  • @sproketboy我的想法是提供一个用于处理Java命名约定的实现,而不是用于处理表示名称等的任何类型的字符串。需要付出更多的努力来正确处理处理名称的所有语言/区域差异。 (3认同)

sco*_*ttb 35

如果我可以提交解决方案......

以下方法基于dfa发布的方法.它进行了以下主要更改(适用于我当时需要的解决方案):它会强制输入字符串中的所有字符为小写,除非它后面紧跟一个"可操作的分隔符",在这种情况下,字符被强制转换为大写.

我的例程的一个主要限制是它假设"标题大小写"是为所有语言环境统一定义的,并且由我使用的相同案例约定表示,因此在这方面它不如dfa的代码有用.

public static String toDisplayCase(String s) {

    final String ACTIONABLE_DELIMITERS = " '-/"; // these cause the character following
                                                 // to be capitalized

    StringBuilder sb = new StringBuilder();
    boolean capNext = true;

    for (char c : s.toCharArray()) {
        c = (capNext)
                ? Character.toUpperCase(c)
                : Character.toLowerCase(c);
        sb.append(c);
        capNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0); // explicit cast not needed
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

测试值

一个字符串

maRTin o'maLLEY

约翰威尔克斯展位

是另一个字符串

产出

一个字符串

马丁奥马利

约翰威尔克斯 - 布斯

又一串


jie*_*eng 20

使用Apache Commons的WordUtils.capitalizeFully().

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
Run Code Online (Sandbox Code Playgroud)


小智 10

你可以像这样使用apache commons langs:

WordUtils.capitalizeFully("this is a text to be capitalize")
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到java doc: WordUtils.capitalizeFully java doc

如果你想删除世界之间的空格,你可以使用:

StringUtils.remove(WordUtils.capitalizeFully("this is a text to be capitalize")," ")
Run Code Online (Sandbox Code Playgroud)

你可以找到String StringUtils.remove java doc的java doc

我希望这有帮助.


mrt*_*rts 6

这是基于@dfa 和@scottb 的回答的另一种处理任何非字母/数字字符的答案:

public final class TitleCase {

    public static String toTitleCase(String input) {

        StringBuilder titleCase = new StringBuilder(input.length());
        boolean nextTitleCase = true;

        for (char c : input.toLowerCase().toCharArray()) {
            if (!Character.isLetterOrDigit(c)) {
                nextTitleCase = true;
            } else if (nextTitleCase) {
                c = Character.toTitleCase(c);
                nextTitleCase = false;
            }
            titleCase.append(c);
        }

        return titleCase.toString();
    }

}
Run Code Online (Sandbox Code Playgroud)

给定输入:

MARY ÄNN O'CONNEŽ-ŠUSLIK

输出是

Mary Änn O'Connež-Šuslik


Dan*_*l F 5

如果您想根据最新的Unicode标准获得正确答案,则应使用icu4j.

UCharacter.toTitleCase(Locale.US, "hello world", null, 0);
Run Code Online (Sandbox Code Playgroud)

请注意,这是区域设置敏感的.

Api文档

履行