我用以下方式去实现,但数字都被过滤掉了,请看:
public static String camelCase2USLCase(String clazzName)
{
Pattern p=Pattern.complie("[A-Z]+[a-z]*");
Macher m=p.matcher(clazzName);
StringBuilder sb=new StringBuilder();
while(m.find)
{
sb.append(m.group.toLowerCase()).append("_");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
public static String camelCase2USLCase(String clazzName)
{
Pattern p=Pattern.complie("[A-Z]+[a-z]*");
Macher m=p.matcher(clazzName);
StringBuilder sb=new StringBuilder();
while(m.find)
{
sb.append(m.group.toLowerCase()).append("_");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
return clazzName.replaceAll("([A-Z]+[a-z]*)", "$1_").toLowerCase();
}
这样涅
Pattern p = Pattern.compile("(^.*?)([A-Z]+[a-z]*)(.*$)");
Matcher m;
while ((m = p.matcher(clazzName)).matches()) {
clazzName = m.group(1) + m.group(2).toLowerCase() + "_" + m.group(3);
}
return clazzName;
}方法2
public static String camelCase2USLCase(String clazzName) {
Matcher m;
Pattern p = Pattern.compile("(^.*?)([A-Z]+[a-z]*)(.*$)");
StringBuffer sb = new StringBuffer();
while ((m = p.matcher(clazzName)).matches()) {
clazzName = m.group(1) + m.group(2).toLowerCase() + "_" + m.group(3);
}
p = Pattern.compile("(^.*)_(.*$)");
if ((m = p.matcher(clazzName)).matches()) {
clazzName = m.group(1) + m.group(2);
}
return clazzName;
}
[]内表示范围的意思,可以出现a-z和数字效果等同于出现a-z或数字
String str = s.replaceAll("(\\w(?=[A-Z|0-9]))", "$1_").toLowerCase() ;
System.out.println(str);
}