-3

如何将表单eyesOfTheTiger中的字符串转换为读取的字符串eyes-of-the-tiger

4

4 回答 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);
}

另一种方法是:

穿越Stringchar 通过char,不断将字符添加到StringBuilder. 找到大写的 a后,将的小写char附加-到。StringBuilderchar

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_CAMELandLOWER_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 回答