在Java中将字符串转换为修改后的驼峰式或称为标题式。

22
我想使用预定义的库将任何字符串转换为修改后的驼峰式或标题式,而不是编写自己的函数。
例如,将 "HI tHiS is SomE Statement" 转换为 "Hi This Is Some Statement"。正则表达式或任何标准库都可以帮助我。
我在 eclipse 中发现了某些库函数,如 STRING.toCamelCase(); 是否存在类似的东西?

3
也许你指的是“标题大小写”(Title case)?而“驼峰命名法”(Camel case)通常指类似于“HiThisIsSomeStatement”这样的命名方式(单词之间没有分隔符)。 - Ted Hopp
抱歉,我不知道什么是标题大小写。感谢Ted Hopp的帮助。我想要标题大小写。 - takrishna
4个回答

25

我用以下内容解决了这个问题。

import org.apache.commons.lang.StringUtils;
StringUtils.capitalize(MyString);

感谢 Ted Hopp 正确指出问题应该是 TITLE CASE 而不是修改后的 CAMEL CASE。

通常情况下,Camel Case 中单词之间没有空格。


3
Android Studio Java 不工作。 - user2522354
1
你是否已经导入了所需的Apache包?这个工具并不与任何IDE绑定,它是一个Java实用程序。 - takrishna

24

你可以很容易地编写该方法:

  public static String toCamelCase(final String init) {
    if (init == null)
        return null;

    final StringBuilder ret = new StringBuilder(init.length());

    for (final String word : init.split(" ")) {
        if (!word.isEmpty()) {
            ret.append(Character.toUpperCase(word.charAt(0)));
            ret.append(word.substring(1).toLowerCase());
        }
        if (!(ret.length() == init.length()))
            ret.append(" ");
    }

    return ret.toString();
}

6
你可以使用Character.toUpperCase(word.charAt(0))替换word.substring(0, 1).toUpperCase(),两者的作用相同,都是将字符串的第一个字母转换为大写字母。 - fge
@fge 这是一个相当旧的评论,但我想知道你在这背后的思考过程。你能否详细说明两者之间的区别。 - tez

21

来自 commons-lang3

org.apache.commons.lang3.text.WordUtils.capitalizeFully(String str)

4
已过时,已被org.apache.commons.text取代。 - aswzen

2

参考文献:

    static String toCamelCase(String s){
           String[] parts = s.split(" ");
           String camelCaseString = "";
           for (String part : parts){
               if(part!=null && part.trim().length()>0)
              camelCaseString = camelCaseString + toProperCase(part);
               else
                   camelCaseString=camelCaseString+part+" ";   
           }
           return camelCaseString;
        }

        static String toProperCase(String s) {
            String temp=s.trim();
            String spaces="";
            if(temp.length()!=s.length())
            {
            int startCharIndex=s.charAt(temp.indexOf(0));
            spaces=s.substring(0,startCharIndex);
            }
            temp=temp.substring(0, 1).toUpperCase() +
            spaces+temp.substring(1).toLowerCase()+" ";
            return temp;

        }
  public static void main(String[] args) {
     String string="HI tHiS is   SomE Statement";
     System.out.println(toCamelCase(string));
  }

如果字符串中有两个连续的空格(或者字符串为空),则此代码会抛出StringIndexOutOfBoundsException异常。如果字符串为null,则会抛出NullPointerException异常。 - Florent Bayle
@FlorentBayle 哦,让我们看看更新的答案!! - NFE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接