大写字母后插入空格

时间:2011-02-03 12:23:48

标签: java string

如何将"HelloWorld"转换为"Hello World"。拆分必须根据大写字母进行,但应排除第一个字母。

P.S :我知道使用String.split然后合并。只想知道是否有更好的方法。

5 个答案:

答案 0 :(得分:61)

String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2");

这个正则表达式用大写字母搜索一个小写字母,并用前者,空格和后者替换它们(用空格有效地将它们分开)。它将每个都放在一个捕获组()中,以便能够通过反向引用($1$2)重用替换字符串中的值。

要查找大写和小写字母,请使用\p{Ll}\p{Lu}(而不是[a-z][A-Z]),因为它会处理所有 Unicode标准中的大写和小写字母,而不仅仅是ASCII范围内的字母(this nice explanation of Unicode in regexes也主要适用于Java)。

答案 1 :(得分:5)

更好是主观的。这需要更多代码:

public static String deCamelCasealize(String camelCasedString) {
    if (camelCasedString == null || camelCasedString.isEmpty())
        return camelCasedString;

    StringBuilder result = new StringBuilder();
    result.append(camelCasedString.charAt(0));
    for (int i = 1; i < camelCasedString.length(); i++) {
        if (Character.isUpperCase(camelCasedString.charAt(i)))
        result.append(" ");
        result.append(camelCasedString.charAt(i));
    }
    return result.toString();
}

在实用程序类中隐藏这个丑陋的实现并将其用作API(从用户角度来看看是正常的;)

答案 2 :(得分:3)

    String s = "HelloWorldNishant";
    StringBuilder out = new StringBuilder(s);
    Pattern p = Pattern.compile("[A-Z]");
    Matcher m = p.matcher(s);
    int extraFeed = 0;
    while(m.find()){
        if(m.start()!=0){
            out = out.insert(m.start()+extraFeed, " ");
            extraFeed++;
        }
    }
    System.out.println(out);

打印

  

Hello World Nishant

答案 3 :(得分:1)

如果你不想使用正则表达式,你可以循环遍历字符串中的字符,将它们添加到stringbuilder中(如果遇到不是第一个的大写字母,则向字符串构建器添加空格):

String s = "HelloWorld";
StringBuilder result = new StringBuilder();
for(int i=0 ; i<s.length() ; i++) {
    char c = s.charAt(i);
    if(i!=0&&Character.isUpperCase(c)) {
        result.append(' ');
    }
    result.append(c);
}

答案 4 :(得分:0)

伪代码:

String source = ...;
String result = "";

// FIXME: check for enf-of-source

for each letter in source {
    while current letter not uppercase {
        push the letter to result;
        advance one letter;
    }
    if not the first letter {
        push space to result;
    }
    push the letter to result;
}