4

我有一个看起来像这样的字符串:

CALDARI_STARSHIP_ENGINEERING

我需要编辑它看起来像

Caldari Starship Engineering

不幸的是,现在是凌晨三点,我一生都无法弄清楚这一点。我一直在替换字符串中的东西时遇到麻烦,所以任何帮助都会很棒,并且会帮助我了解将来如何做到这一点。

4

5 回答 5

9

这样的事情很简单:

    String text = "CALDARI_STARSHIP_ENGINEERING";
    text = text.replace("_", " ");
    StringBuilder out = new StringBuilder();
    for (String s : text.split("\\b")) {
        if (!s.isEmpty()) {
            out.append(s.substring(0, 1) + s.substring(1).toLowerCase());
        }
    }
    System.out.println("[" + out.toString() + "]");
    // prints "[Caldari Starship Engineering]"

split在单词边界锚点上。

也可以看看


Matcher循环解决方案

如果你不介意使用StringBuffer,你也可以Matcher.appendReplacement/Tail像这样使用循环:

    String text = "CALDARI_STARSHIP_ENGINEERING";
    text = text.replace("_", " ");

    Matcher m = Pattern.compile("(?<=\\b\\w)\\w+").matcher(text);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, m.group().toLowerCase());
    }
    m.appendTail(sb);
    System.out.println("[" + sb.toString() + "]");
    // prints "[Caldari Starship Engineering]"

正则表达式使用断言来匹配单词的“尾部”部分,即需要小写的部分。它向后看(?<=...),发现有一个单词边界\b,后跟一个单词 character \w\w+然后需要匹配任何剩余的,以便可以小写。

相关问题

于 2010-05-16T08:30:26.067 回答
4

你可以试试这个:

String originalString = "CALDARI_STARSHIP_ENGINEERING";
String newString =
    WordUtils.capitalize(originalString.replace('_', ' ').toLowerCase());

WordUtils是 Commons Lang 库的一部分 ( http://commons.apache.org/lang/ )

于 2010-05-16T08:03:41.297 回答
1

使用正则表达式:

String s = "CALDARI_STARSHIP_ENGINEERING";
StringBuilder camel = new StringBuilder();
Matcher m = Pattern.compile("([^_])([^_]*)").matcher(s);
while (m.find())
    camel.append(m.group(1)).append(m.group(2).toLowerCase());
于 2010-05-17T07:48:09.497 回答
0

未经测试,但这就是我前段时间实现相同的方式:

s = "CALDARI_STARSHIP_ENGINEERING";
StringBuilder b = new StringBuilder();
boolean upper = true;
for(char c : s.toCharArray()) {
    if( upper ) {
        b.append(c);
        upper = false;
    } else if( c = '_' ) {
        b.append(" ");
        upper = true;
    } else {
        b.append(Character.toLowerCase(c));
    }
}
s = b.toString();

请注意,EVE 许可协议可能禁止编写对您的职业有帮助的外部工具。它可能是你学习 Python 的契机,因为 EVE 的大部分内容都是用 Python 编写的 :)。

于 2010-05-16T08:01:40.270 回答
0

快速而肮脏的方式:

全部小写

   line.toLowerCase();

拆分成单词:

   String[] words = line.split("_");

然后遍历首字母大写的单词:

  words[i].substring(0, 1).toUpperCase() 
于 2010-05-16T08:03:42.813 回答