Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在大写字母后插入空格_Java_String - Fatal编程技术网

Java 在大写字母后插入空格

Java 在大写字母后插入空格,java,string,Java,String,如何将“HelloWorld”转换为“Hello World”。拆分必须基于大写字母进行,但应排除第一个字母 p.S:我知道使用String.split然后组合。只是想知道是否有更好的方法 这个正则表达式搜索一个小写字母,后跟一个大写字母,并用前者、空格和后者替换它们(有效地用空格分隔它们)。为了能够通过反向引用重用替换字符串中的值($1和$2) 为了查找大写和小写字母,它使用\p{Ll}和\p{Lu}(而不是[a-z]和[a-z]),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅

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

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

这个正则表达式搜索一个小写字母,后跟一个大写字母,并用前者、空格和后者替换它们(有效地用空格分隔它们)。为了能够通过反向引用重用替换字符串中的值(
$1
$2


为了查找大写和小写字母,它使用
\p{Ll}
\p{Lu}
(而不是
[a-z]
[a-z]
),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅是ASCII范围中的字母(大部分也适用于Java).

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

String s=“HelloWorld”;
StringBuilder结果=新建StringBuilder();
对于(int i=0;i伪代码:

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;
}
更好是主观的。这需要更多的代码行:

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();
}
public静态字符串decamelcasenalize(字符串camelCasedString){
if(camelCasedString==null | | camelCasedString.isEmpty())
返回CAMELDSTRING;
StringBuilder结果=新建StringBuilder();
结果.append(camelCasedString.charAt(0));
对于(int i=1;i
将这个丑陋的实现隐藏在实用程序类中,并将其用作API(从用户的角度来看,看起来还行;)

印刷品

你好,世界尼桑


作为评论而不是回答发布,因为我不知道语法。但是我相信写一个正则表达式会很容易找到大写字母(不是在句子的开头)并在它前面加一个空格。你希望转换(“HELLO”)吗?@vz0:实际上我的字符串在大写字母之间会有一些小写字母。我知道这个方法,正如我在p.s.中提到的。@Emil-你说过你知道使用字符串拆分然后组合,这个方法不会使用拆分一次,也不会模拟它的行为+1这是一个很好的实现,但我更喜欢正则表达式。我只需要转换几个字符串。
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;
}
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();
}
    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);