如何在java中替换字符串?

时间:2013-07-16 08:35:12

标签: java regex string

我有String str = "a_bcde_fghij_k"

我希望将其更改为"aBcdeFghijK"

如果有_个字符,则下一个字符将更改为大写并删除_个字符。

我该怎么做?

6 个答案:

答案 0 :(得分:10)

我怀疑你需要逐个完成这个角色,随时随地建立弦乐。例如:

public static String underscoreToCapital(String text) {
    // This will be a bit bigger than necessary, but that shouldn't matter.
    StringBuilder builder = new StringBuilder(text.length());
    boolean capitalizeNext = false;
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        if (c == '_') {
            capitalizeNext = true;
        } else {
            builder.append(capitalizeNext ? Character.toUpperCase(c) : c);
            capitalizeNext = false;
        }
    }
    return builder.toString();
}

答案 1 :(得分:4)

单独的正则表达式不能这样做(没有“touppercase”运算符,可以这么说)。

Guava有一个名为CaseFormat的小实用工具可以帮助你:

String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)

即使您的输入不是UPPER_UNDERSCORE格式的严格,但这样做仍然有效,但CaseFormat是这样宽松的(如果您希望第一个字符大写为好好用UPPER_CAMEL代替。)

或者,如果你绝对想要使用正则表达式,你可以使用Matcher.appendReplacement(它在JavaDoc中有一个很好的例子):

public static final Pattern UNDERSCORE_FOLLOWED_BY_ANYTHING = Pattern
        .compile("_(.)");

public static String toUpperAfterUnderscore(String input) {
    Matcher m = UNDERSCORE_FOLLOWED_BY_ANYTHING.matcher(input);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, m.group(1).toUpperCase());
    }
    m.appendTail(sb);
    return sb.toString();
}

答案 2 :(得分:2)

您也可以尝试拆分。

String str = "a_bcde_fghij_k"
String result[] = str.split("_");
String newstr = result[0];
for (int i=1;i<result.length;i++) {
     char first = Character.toUpperCase(result[i].charAt(0));
     newstr = newstr + first + result[i].substring(1);
}
System.out.println(newstr);
如果您觉得重要,

split()会使用正则表达式。

答案 3 :(得分:1)

与我的方法略有不同,但效果很好......

  String str = "a_bcde_fghij_k";
  int count=0;
  String[] splitString = (str.split("_"));

  for (String string : splitString)
  {
    count++;        
    if(count>1)
    {
        char c= string.charAt(0);
        System.out.print(string.replace(c, Character.toUpperCase(c)));
    }
    else
        System.out.print(string);
  }

不是吗?

答案 4 :(得分:0)

使用正则表达式并没有直接的方法,但我认为使用正则表达式可以大大简化任务:

public static String underscoreToCapital(final String input) {
    String ret = input;
    final Matcher m = Pattern.compile("_([a-z])").matcher(input);
    while (m.find()) {
        final String found = m.group();
        final String toUppercase = m.group(1);
        ret = ret.replaceAll(found, toUppercase.toUpperCase());
    }
    return ret;
}

答案 5 :(得分:0)

你可能需要检查一下这个方法的执行情况,但这可能是另一个想法:

public String replaceAndUpper(String word) {
    int charToRemove = word.indexOf("_");
    while (charToRemove != -1) {
        String part1 = word.substring(0, charToRemove);
        String part2 = word.substring(charToRemove + 1);
        char upperChar = Character.toUpperCase(part2.charAt(0));
        word = part1 + String.valueOf(upperChar) + part2.substring(1);
        charToRemove = word.indexOf("_");
    }
    return word;
}