【问题标题】:How to Convert String to another String format如何将字符串转换为另一种字符串格式
【发布时间】:2013-07-11 22:42:29
【问题描述】:

如何将eyesOfTheTiger 形式的字符串转换为eyes-of-the-tiger?

【问题讨论】:

  • 真的,你应该自己试试看。阅读 String 和 Character 的 javadoc。至少表明您考虑过可能的解决方案。
  • 查看字符串类API并使用子字符串方法
  • @austin 这不是重复的。这个问题的顺序是相反的。

标签: java string algorithm substring


【解决方案1】:

如果字符是大写,只需遍历字符串并采取不同的操作。

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。
【解决方案2】:

在您开始通过子字符串、正则表达式等自己实现此功能之前,请考虑使用 Google Guava。 com.google.common.base.CaseFormat 类完全解决了你打算做的事情。

在您的情况下,您需要 LOWER_CAMEL 和 LOWER_HYPHEN 类常量和 to(CaseFormat format, String s) 方法。

IMO,使用成熟且经过良好测试的库总是比自己实现所有内容要好。

【讨论】:

    【解决方案3】:

    您可以使用正则表达式split() 字符串,例如"(?&lt;!(^|[A-Z0-9]))(?=[A-Z0-9])|(?&lt;!^)(?=[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(); 
    }
    

    【讨论】:

    • 天哪。记录这个正则表达式的工作原理比编写没有正则表达式的代码需要更多的空间(当然效率会低很多)
    • @JBNizet 绝对是,但当我看到问题时,这是我的第一直觉。
    【解决方案4】:

    快速而肮脏的解决方案可能是这样的: (您应该决定如何处理空格、破折号、句号、 英语等以外的语言)

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多