关于字符串操作

时间:2010-03-15 10:15:09

标签: java string

我有一个String str,它可以包含如下所示的值列表。我希望字符串中的第一个字母是大写的,如果下划线出现在字符串中,那么我需要删除它,并需要将其后面的字母作为大写。剩下的所有字母我希望它是小写的。

""
"abc" 
"abc_def"
"Abc_def_Ghi12_abd"
"abc__de"
"_"
Output:
""
"Abc"
"AbcDef"
"AbcDefGhi12Abd"
"AbcDe"
""

4 个答案:

答案 0 :(得分:1)

好吧,如果没有告诉我们你将任何的努力放到这个问题中,这将是有点模糊的。

我在这里看到两种可能性:

  1. 将字符串拆分为下划线,将this question的答案应用于每个部分并重新组合。
  2. 创建StringBuilder,遍历字符串并跟踪您是否

    • 在字符串的开头
    • 在下划线或
    • 之后
    • 其他地方

    并在将当前字符附加到StringBuilder实例之前对其进行适当操作。

答案 1 :(得分:1)

  1. _替换为空格(str.replace("_", " ")
  2. 使用WordUtils.capitalizeFully(str);(来自commons-lang
  3. 用空格替换空格(str.replace(" ", "")

答案 2 :(得分:0)

您可以使用以下基于正则表达式的代码:

public static String camelize(String input) {
  char[] c = input.toCharArray();
  Pattern pattern = Pattern.compile(".*_([a-z]).*");
  Matcher m = pattern.matcher(input);
  while ( m.find() ) {
    int index = m.start(1);
    c[index] = String.valueOf(c[index]).toUpperCase().charAt(0); 
  }
  return String.valueOf(c).replace("_", "");
}

答案 3 :(得分:0)

在java.util.regex包中使用Pattern / Matcher:

对于数组中的每个字符串,执行以下操作:

StringBuffer output = new StringBuffer();
Matcher match = Pattern.compile("[^|_](\w)").matcher(inStr);
while(match.find()) {
   match.appendReplacement(output, matcher.match(0).ToUpper());
}
match.appendTail(output);

// Will have the properly capitalized string.
String capitalized = output.ToString();

正则表达式查找字符串的开头或下划线“[^ | _]” 然后将以下字符放入“(\ w)”

组中

然后代码遍历输入字符串中的每个匹配项,将第一个满意的组大写。