Java将字符串数组中每个单词的首字母大写

时间:2018-11-14 20:36:09

标签: java arrays

为简洁起见,目前在移动设备上。

我有一个字符串数组,值 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,但是第二个和后面的值是正确的,例如德夫,吉。我不知道为什么第一个值保持小写。

任何帮助将不胜感激!

4 个答案:

答案 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从未大写

谢谢,抱歉浪费您的时间