Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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
使用正则表达式取消camelCase Java字符串_Java_Regex_String - Fatal编程技术网

使用正则表达式取消camelCase Java字符串

使用正则表达式取消camelCase Java字符串,java,regex,string,Java,Regex,String,这段代码似乎工作得很好,但我很想用正则表达式来清理它 public static void main(String args[]) { String s = "IAmASentenceInCamelCaseWithNumbers500And1And37"; System.out.println(unCamelCase(s)); } public static String unCamelCase(String string) { StringBuilder newSt

这段代码似乎工作得很好,但我很想用正则表达式来清理它

 public static void main(String args[]) {
    String s = "IAmASentenceInCamelCaseWithNumbers500And1And37";
    System.out.println(unCamelCase(s));
}

public static String unCamelCase(String string) {
    StringBuilder newString = new StringBuilder(string.length() * 2);
    newString.append(string.charAt(0));
    for (int i = 1; i < string.length(); i++) {
        if (Character.isUpperCase(string.charAt(i)) && string.charAt(i - 1) != ' '
            || Character.isDigit(string.charAt(i)) && !Character.isDigit(string.charAt(i - 1))) {
            newString.append(' ');
        }
        newString.append(string.charAt(i));
    }
    return newString.toString();
}
输出:

I Am A Sentence In Camel Case With Numbers 500 And 1 And 37
我不喜欢使用丑陋的if语句,我希望有一种方法可以使用一行使用regex的代码。我试了一下,但在有一两个字母的单词上失败了

无法工作的失败代码:

return string.replaceAll("(.)([A-Z0-9]\\w)", "$1 $2");

我想你可以试试这个

let str=“IAMASEntenceincamelcase,编号为500、1和37”;
功能性非儿化酶(str){
返回str.replace(/(?:[A-Z]|[0-9]+)/g,(m)=>''+m.toUpperCase()).trim();
}

console.log(unCamelCase(str))我想你可以试试这个

let str=“IAMASEntenceincamelcase,编号为500、1和37”;
功能性非儿化酶(str){
返回str.replace(/(?:[A-Z]|[0-9]+)/g,(m)=>''+m.toUpperCase()).trim();
}

console.log(unCamelCase(str))完成工作的正确正则表达式和代码如下

String s = "IAmASentenceInCamelCaseWithNumbers500And1And37";
System.out.println("Output: " + s.replaceAll("[A-Z]|\\d+", " $0").trim());
这个输出

Output: I Am A Sentence In Camel Case With Numbers 500 And 1 And 37
编辑OP在评论中提出的问题的答案:

如果输入字符串为

ThisIsAnABBRFor1Abbreviation
正则表达式需要稍加修改,变成这样,
[a-Z]+(?![a-Z])|[a-Z]|\\d+
来处理缩写

这个代码

String s = "ThisIsAnABBRFor1Abbreviation";
System.out.println("Input: " + s.replaceAll("[A-Z]+(?![a-z])|[A-Z]|\\d+", " $0").trim());
根据评论中的OP ZeekAran给出预期输出

Input: This Is An ABBR For 1 Abbreviation

完成工作的正确正则表达式和代码如下

String s = "IAmASentenceInCamelCaseWithNumbers500And1And37";
System.out.println("Output: " + s.replaceAll("[A-Z]|\\d+", " $0").trim());
这个输出

Output: I Am A Sentence In Camel Case With Numbers 500 And 1 And 37
编辑OP在评论中提出的问题的答案:

如果输入字符串为

ThisIsAnABBRFor1Abbreviation
正则表达式需要稍加修改,变成这样,
[a-Z]+(?![a-Z])|[a-Z]|\\d+
来处理缩写

这个代码

String s = "ThisIsAnABBRFor1Abbreviation";
System.out.println("Input: " + s.replaceAll("[A-Z]+(?![a-z])|[A-Z]|\\d+", " $0").trim());
根据评论中的OP ZeekAran给出预期输出

Input: This Is An ABBR For 1 Abbreviation

您可以使用此基于查找的正则表达式解决方案:

final String result = string.replaceAll(
   "(?<=\\S)(?=[A-Z])|(?<=[^\\s\\d])(?=\\d)", " ");

//=> I Am A Sentence In Camel Case With Numbers 500 And 1 And 37
final String result=String.replaceAll(

“(?您可以使用此基于查找的正则表达式解决方案:

final String result = string.replaceAll(
   "(?<=\\S)(?=[A-Z])|(?<=[^\\s\\d])(?=\\d)", " ");

//=> I Am A Sentence In Camel Case With Numbers 500 And 1 And 37
final String result=String.replaceAll(

(?您还可以使用Apache commons StringUtils的splitByCharacterTypeCamelCase()方法:您还可以使用Apache commons StringUtils的splitByCharacterTypeCamelCase()方法:哇。这很简单。是否有任何简单的方法也可以添加缩写支持?例如,输入:“ThisisanabbrFor1Abbrevision”并输出:“这是1缩写的缩写”这(稍微)不同于问题中的unCamelCase函数。如果原始输入已经包含空格,这种方法可能会引入双空格。即
string.charAt(I-1)!=''
这个正则表达式的替换并没有考虑到条件。@泽卡兰:是的,正则表达式需要一些修改。在注释中编辑了我对你的案例的回答。@Alderath:是的,但对于我的案例,我想我的IDE会先让我知道我的函数名无效。哇。这很简单。有没有简单的方法添加缩写sup端口?也就是说,输入:“thisisanabbrfor1Abbrevision”和输出:“这是1缩写的缩写”,这与问题中的unCamelCase函数(稍微)不同。如果原始输入已经包含空格,这种方法可能会引入双空格。即
string.charAt(I-1)!=''
此正则表达式替换未考虑条件。@泽卡兰:是的,正则表达式需要稍作修改。在注释中编辑了我对您案例的回答。@Alderath:没错,但对于我的案例,我想我的IDE会先让我知道我的函数名无效。