为简洁起见,目前在移动设备上。
我有一个字符串数组,值 ABC,DEF,GHI ,我想更改为大写形式: Abc,Def,Ghi
我的代码如下:
import org.apache.commons.lang3.text.WordUtils;
....
final String[] split = stringToConvert.split(", ");
final StringBuilder sb = new StringBuilder();
for ( String s : split) {
//s = WordUtils.capitalizeFully(s.toLowerCase());
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(WordUtils.capitalizeFully(s.toLowerCase()));
}
return sb.toString();
第一个值始终是abc,但是第二个和后面的值是正确的,例如德夫,吉。我不知道为什么第一个值保持小写。
任何帮助将不胜感激!
答案 0 :(得分:2)
再次检查您的代码。
StringBuilder buf = new StringBuilder();
for (String str : new String[]{"ABC", "DEF", "GHI"})
buf.append(WordUtils.capitalizeFully(str.toLowerCase()));
System.out.println(buf);
按预期方式打印AbcDefGhi
。
如果使用Stream
,可能会更简单:
String res = Stream.of("ABC", "DEF", "GHI")
.map(WordUtils::capitalizeFully)
.collect(Collectors.joining(", ")); // if you want to split words with comma
答案 1 :(得分:0)
您的代码应该可以使用。
但是我可以建议使用流吗?
String concatenatedString = Arrays.stream(array)
.map(WordUtils::capitalizeFully)
.collect(Collectors.joining());
其中具有适当的静态导入的内容非常适合一行而不会丢失可读性:
String concatenatedString = stream(array).map(WordUtils::capitalizeFully).collect(joining());
请注意,joining()
反复使用StringBuilder
,因此您无需担心此处的性能。另外,joining()
允许您选择要用来分隔流内容的字符串,在这种情况下,我选择了一个空字符串,这将导致 AbcDefGhi 。
答案 2 :(得分:-1)
这应该做:
String[] stringToSplit = {"ABC", "DEF", "GHI"};
StringBuilder sb = new StringBuilder();
for(String s: stringToSplit) {
sb.append(s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase());
}
答案 3 :(得分:-1)
更新:我累了...
第一个字符实际上是数组中的[,而不是“ a”,因此a从未大写
谢谢,抱歉浪费您的时间