我有一个看起来像这样的字符串:
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+
然后需要进行匹配,以便将其小写。
相关问题
- Use Java and RegEx to convert casing in a string
- Java 正则表达式不支持 Perl 预处理操作
\l
\u
,\L
, 和\U
.
- Java 正则表达式不支持 Perl 预处理操作
- Java split is eating my characters.
- 更多使用断言的例子
- StringBuilder and StringBuffer in Java
- 不幸的是,
appendReplacement/Tail
只需要StringBuffer
- 不幸的是,
关于java - 重新格式化 Java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842979/