java - 重新格式化 Java 字符串

标签 java replace string-formatting camelcasing

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

CALDARI_STARSHIP_ENGINEERING

我需要把它编辑成这样

Caldari Starship Engineering

不幸的是,现在是凌晨三点,我这辈子都想不通。我在替换字符串中的内容时总是遇到麻烦,所以任何帮助都会很棒,并且会帮助我了解将来如何执行此操作。

最佳答案

这样的事情很简单:

    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在单词边界 anchor 上。

另见


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+然后需要进行匹配,以便将其小写。

相关问题

关于java - 重新格式化 Java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842979/

相关文章:

javascript - 使用 Javascript 删除括号和文本

c# - 将 int 转换为带前导零的十六进制

python - 从旧样式自动转换高级字符串格式化程序

java - "Can' t 为基本名称消息找到包”错误

java - 通过 Java struts Web 应用程序在 Azure AD 中进行 SAML 身份验证

javascript - 替换文本中的数字

c# - 替换富文本框中的所有文本

java - 在 windows 64bit 中为 java 设置 Google 的 protobuf 环境

java - Android-以编程方式发送彩信而不是默认应用程序

python - 拆分逗号分隔的字符串以分隔 Python 列表中的字符串