将字符串分解为大写的字符

时间:2010-12-21 17:45:44

标签: java string

我正在制作一个方法来读取整个类代码并用它做一些事情。

我想要做的是获取方法的名称,并用它创建一个String。

像removeProduct

之类的东西

我将制作一个字符串“删除产品”

如何在大写情况下拆分名称方法? 如何构建这个新字符串,每个单词的第一个字母作为大写字母? 我正在使用子字符串,有更简单,更好的方法吗?

ps:我确信我的巴西英语对标题没有帮助。如果有人能让它看起来更好,我会很感激。

5 个答案:

答案 0 :(得分:6)

请勿重新发明轮子,请使用commons-lang

中的方法
String input = "methodName";
String[] words = StringUtils.splitByCharacterTypeCamelCase(methodName);
String humanised = StringUtils.join(words, ' ');

答案 1 :(得分:4)

您可以使用正则表达式将名称拆分为不同的单词,然后将第一个单词大写:

public static void main(String[] args) {
    String input = "removeProduct";

    //split into words
    String[] words = input.split("(?=[A-Z])");

    words[0] = capitalizeFirstLetter(words[0]);

    //join
    StringBuilder builder = new StringBuilder();
    for ( String s : words ) {
        builder.append(s).append(" ");
    }

    System.out.println(builder.toString());

}

private static String capitalizeFirstLetter(String in) {
    return in.substring(0, 1).toUpperCase() + in.substring(1);
}

请注意,这需要更好的角落案例处理,例如不在末尾添加空格并处理1个字符的单词。

编辑:我的意思是解释正则表达式。正则表达式(?=[A-Z])zero-width assertion (positive lookahead),匹配下一个字符位于“A”和“Z”之间的位置。

答案 2 :(得分:0)

public String convertMethodName(String methodName) {
    StringBuilder sb = new StringBuilder().append(Character.toUpperCase(methodName.charAt(0)));
    for (int i = 1; i < methodName.length(); i++) {
        char c = methodName.charAt(i);
        if (Character.isUpperCase(c)) {
            sb.append(' ');
        }
        sb.append(c);
    }
    return sb.toString();
}

如果您希望稍后为其他情况添加功能(连续多个上限等),以这种方式处理它可能会给您一些更好的控制。基本上,对于每个字符,它只是检查它是否在大写字母的范围内(字符代码65-90,包括),如果是,则在单词开始之前向缓冲区添加一个空格。

编辑:使用Character.isUpperCase()

答案 3 :(得分:0)

您可以分两步完成:

1 - 将字符串的第一个字母设为大写。

2 - 在大写字母前面加一个空格,前面加一个小写字母。

对于步骤1,您可以使用函数;对于步骤2,您可以使用String.replaceAll方法:

String str = "removeProduct";
str = capitalizeFirst(str);
str = str.replaceAll("(?<=[^A-Z])([A-Z])"," $1");

static String capitalizeFirst(String input) {
      return input.substring(0, 1).toUpperCase() + input.substring(1);
}

Code In Action

答案 4 :(得分:0)

@MrWiggles是对的。 还有一种方法可以做到这一点,而不是幻想:)

import java.util.StringTokenizer;

public class StringUtil {

    public static String captilizeFirstLetter(String token) {
        return Character.toUpperCase(token.charAt(0)) + token.substring(1);
    }

    public static String convert(String str) {
        final StringTokenizer st = new StringTokenizer(str,
                "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", true);
        final StringBuilder sb = new StringBuilder();
        String token;
        if (st.hasMoreTokens()) {
            token = st.nextToken();
            sb.append(StringUtil.captilizeFirstLetter(token) + " ");
        }

        while (st.hasMoreTokens()) {
            token = st.nextToken();
            if (st.hasMoreTokens()) {
                token = token + st.nextToken();
            }

            sb.append(StringUtil.captilizeFirstLetter(token) + " ");
        }
        return sb.toString().trim();
    }

    public static void main(String[] args) throws Exception {

        String words = StringUtil.convert("helloWorldHowAreYou");
        System.out.println(words);
    }
}