如何将表单eyesOfTheTiger
中的字符串转换为读取的字符串eyes-of-the-tiger
?
问问题
508 次
4 回答
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"));
}
}
于 2013-07-13T14:30:01.503 回答
1
您可以使用正则表达式split()"(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])"
字符串,例如然后-
在每个 split 的末尾追加。
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
. 找到大写的 a后,将的小写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();
}
于 2013-07-13T14:24:36.387 回答
1
在您开始通过子字符串、正则表达式等自己实现此功能之前,请考虑使用 Google Guava。类完全com.google.common.base.CaseFormat
解决了您打算做的事情。
在您的情况下,您需要LOWER_CAMEL
andLOWER_HYPHEN
类常量和to(CaseFormat format, String s)
方法。
IMO,使用成熟且经过良好测试的库总是比自己实现所有内容更好。
于 2013-07-13T14:27:18.990 回答
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();
}
于 2013-07-13T14:28:07.180 回答