如何将eyesOfTheTiger
形式的字符串转换为eyes-of-the-tiger
的字符串?
答案 0 :(得分:3)
只需穿过字符串,如果字符大写,则执行不同的操作。
public class Test {
private static String upperCaseToDash(String input) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (Character.isUpperCase(c))
sb.append('-').append(Character.toLowerCase(c));
else
sb.append(c);
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(upperCaseToDash("eyesOfTheTiger"));
}
}
答案 1 :(得分:1)
您可以split()使用正则表达式使用"(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])"
,然后在每次拆分结束时附加-
。
public String camelCaseToDashSeparated(String initialString) {
if(initialString==null || initialString.length()<1)
return initialString;
StringBuilder str = new StringBuilder();
for (String w : "eyesOfTheTiger".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) {
str.append(w.toLowerCase()+"-");
}
return str.substring(0, str.length()-1);
}
另一种方式是:
在String
之后浏览char
,char
,继续将字符添加到StringBuilder
。找到大写的char
后,使用-
的小写将StringBuilder
追加到char
。
public static String camelCaseToDashSeparated2 (String initialString) {
StringBuffer buff = new StringBuffer();
for(int x = 0; x < initialString.length(); x++) {
char c = initialString.charAt(x);
if(Character.isUpperCase(c)) {
buff.append("-").append(Character.toLowerCase(c));
}
else {
buff.append(c);
}
}
return buff.toString();
}
答案 2 :(得分:1)
在您开始通过子串,正则表达式等实现此功能之前,请考虑使用Google Guava。类com.google.common.base.CaseFormat
完全解决了 您想要做的事情。
在您的情况下,您需要LOWER_CAMEL
和LOWER_HYPHEN
类常量以及to(CaseFormat format, String s)
方法。
IMO,使用成熟且经过良好测试的库总是比自己实现一切更好。
答案 3 :(得分:0)
快速而肮脏的解决方案可能是这样的: (你应该决定如何处理空格,破折号,句号, 英语以外的语言等。)
public static String toDashed(String value) {
if (null == value)
return null;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < value.length(); ++i) {
char ch = value.charAt(i);
if ((ch >= 'A') && (ch <= 'Z') && (i > 0)) {
sb.append('-');
sb.append(Character.toLowerCase(ch));
}
else
sb.append(ch);
}
return sb.toString();
}