重新格式化Java字符串

时间:2010-05-16 07:54:10

标签: java replace string-formatting camelcasing

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

CALDARI_STARSHIP_ENGINEERING

我需要将其编辑为

Caldari Starship Engineering

不幸的是,早上三点,我不能为我的生活弄清楚这一点。我总是在替换字符串中的东西时遇到麻烦,所以任何帮助都会很棒,并且会帮助我了解将来如何做到这一点。

5 个答案:

答案 0 :(得分: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后跟一个单词字符\w。然后,任何剩余的\w+都需要匹配,以便它可以小写。

相关问题

答案 1 :(得分:4)

你可以试试这个:

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

WordUtils是Commons Lang图书馆的一部分(http://commons.apache.org/lang/

答案 2 :(得分:1)

使用reg-exps:

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

答案 3 :(得分: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编写的:)。

答案 4 :(得分:0)

快速而肮脏的方式:

小写全部

   line.toLowerCase();

分成单词:

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

然后循环使用首字母大写字词:

  words[i].substring(0, 1).toUpperCase()