使用下划线和数字将java中的字符串更改为camelcase

时间:2014-02-27 06:53:22

标签: java regex

我找到了关于将下划线更改为camelcase的答案但是如何将字母后跟下划线以及数字更改为大写。在其他问题中给出的答案不会将数字后跟数字改为大写。

我想要下划线和数字。

isbarrier1breached => isbarrier1Breached
barrier1_level => barrier1Level

我使用java作为我的编程语言。

2 个答案:

答案 0 :(得分:2)

这个要求似乎只有两条规则:

  • 如果字符是下划线,请不要输出
  • 如果前一个字符是下划线或数字,则大写当前字符

有许多潜在的算法,但一个是保持一个标志,指示我们是否处于上壳模式。

在伪代码中:

 doUppercase = false
 for each input char 'c' {
     # print char the appropriate way:
     if(c is not an underscore) {
        if(doUppercase) {
            append upper cased c to output
        } else {
            append lower cased c to output
        }
     }
     # set flag for next char
     doUppercase = (c is a number or c is an underscore)
  }

另一种选择是存储实际的前一个字符,而不是存储下一次迭代的标志。


或者在Java中:

  public String camelCase(String s) {
     StringBuffer out = new StringBuffer();
     boolean doUppercase = false;
     for(int i = 0; i<s.length();i++) {
        char c = s.charAt(i);
        // append if appropriate
        if(c != '_') {
           out.append(doUppercase ? Character.toUpperCase(c) : c);
        }
        // set capitalisation for next iteration
        doUppercase = ( c == '_' || Character.isDigit(c));
     }
     return out.toString();
  }

答案 1 :(得分:0)

这不太好,但它有效.. :)。效率O(n)

public static void main(String[] args) {

        String s1 = "abc2asda12asa";
        String s2 = "another_var_so_";
        if (s2.endsWith("_")) {
            s2 = s2.replaceAll("_$", "");
        }
        System.out.println(s2);
        while (s2.contains("_")) {
            int index = s2.indexOf("_");

            String s = s2.substring(index, index + 2);
            s2 = s2.replace(s, s.substring(1, s.length()).toUpperCase());

        }
        System.out.println(s2);
    if(!s1.substring(s1.length()-1, s1.length()).matches("\\d+$"))
    {


        int j = 0;
        for (int i = 0; i < s1.length() - j; i++) {
            if (s1.substring(i, i + 1).matches("\\d+")) {
                String s = s1.substring(i + 1, i + 2).toUpperCase();
                s1 = s1.replace(s1.substring(i, i + 2), s);
                j++;
            }
        }
        System.out.println(s1);
    }
    }