我有一个看起来像这样的字符串:
CALDARI_STARSHIP_ENGINEERING
我需要编辑它看起来像
Caldari Starship Engineering
不幸的是,现在是凌晨三点,我一生都无法弄清楚这一点。我一直在替换字符串中的东西时遇到麻烦,所以任何帮助都会很棒,并且会帮助我了解将来如何做到这一点。
我有一个看起来像这样的字符串:
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
在单词边界锚点上。
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+
然后需要匹配任何剩余的,以便可以小写。
\l
\u
、\L
和\U
.appendReplacement/Tail
只需要StringBuffer
你可以试试这个:
String originalString = "CALDARI_STARSHIP_ENGINEERING";
String newString =
WordUtils.capitalize(originalString.replace('_', ' ').toLowerCase());
WordUtils
是 Commons Lang 库的一部分 ( http://commons.apache.org/lang/ )
使用正则表达式:
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());
未经测试,但这就是我前段时间实现相同的方式:
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 编写的 :)。
快速而肮脏的方式:
全部小写
line.toLowerCase();
拆分成单词:
String[] words = line.split("_");
然后遍历首字母大写的单词:
words[i].substring(0, 1).toUpperCase()