将字符串拆分为大写字母字符

3
我正在制作一种方法,可以读取整个类代码并进行一些操作。
我想要做的是获取方法名,并将其制作成一个字符串。
例如:removeProduct
我会制作一个字符串“Remove Product”。
如何将方法名分割为大写字母?
如何构建新字符串,使每个单词的第一个字母都为大写字母?
我正在使用substring方法,是否有更简单更好的方法来完成这个任务?
附注:我确定我的巴西英语没有帮助标题。如果有人能让它看起来更好,我会很感激。

1
你所有的方法都要遵循这个camelCaseStyle吗? - wkl
1
是的,它们将采用驼峰命名法。 - Gondim
5个回答

6

不要白费力气重新发明轮子,使用commons-lang中的方法即可。

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

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])”是一个零宽断言(正向先行断言),匹配下一个字符介于“A”和“Z”之间的位置。

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()函数。

2
尝试使用Character.isUpperCase()代替c >= 65...。如果你要进行直接比较,至少使用c >= 'A',这样清楚你正在做什么。 - Mark Peters

0
你可以分两步完成这个操作:
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);
}

实战编程


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

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