在字符串空格后大写第一个字符如果完整句子是大写的java

时间:2015-01-15 04:31:39

标签: java

我有一些问题,如果所有句子都是大写的话,如何大写字符串的第一个单词。 例如:" VESSEL ONE(L)INC" 我想要的输出:" Vessel One(L)Inc"

目前,我应用此代码,但这仅适用于小写

的所有句子
String source = "vessel two management sdn bhd";
StringBuffer res = new StringBuffer();

String[] strArr = source.split(" ");
 for (String str : strArr) {
  char[] stringArray = str.trim().toCharArray();
  stringArray[1] = Character.toLowerCase(stringArray[1]);
  str = new String(stringArray);

  res.append(str).append(" ");
  }

res.toString().trim()

任何人都可以帮助我?

3 个答案:

答案 0 :(得分:3)

首先,请StringBuilder优先于StringBuffer。其次,您可以使用WordUtils.capitalizeFully(String)之类的

String source = "VESSEL ONE (L) INC";
String capitalized = WordUtils.capitalizeFully(source);

或(如果你不能使用apache commons)你可以写自己的

private static String capitalizeFully(String str) {
    StringBuilder sb = new StringBuilder();
    boolean cnl = true; // <-- capitalize next letter.
    for (char c : str.toCharArray()) {
        if (cnl && Character.isLetter(c)) {
            sb.append(Character.toUpperCase(c));
            cnl = false;
        } else {
            sb.append(Character.toLowerCase(c));
        }
        if (Character.isWhitespace(c)) {
            cnl = true;
        }
    }
    return sb.toString();
}

public static void main(String[] args) {
    String source = "VESSEL ONE (L) INC";
    System.out.println(capitalizeFully(source));
}

答案 1 :(得分:2)

如果使用lib,您可以尝试WordUtils。是一个选择。

另一种方法可能是在应用上面指定的操作之前转换整个字符串toLowerCase

答案 2 :(得分:0)

试试这个

    StringBuffer sb = new StringBuffer();
    Matcher m = Pattern.compile("\\b.+?\\b").matcher(source);
    while(m.find()) {
        String s = m.group().substring(0,1).toUpperCase() + m.group().substring(1).toLowerCase();
        m.appendReplacement(sb, s);
    }
    String res = sb.toString();