使用正则表达式取消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会先让我知道我的函数名无效。