Java 如何对每个单词的第一个字符进行大小写倒置?

Java 如何对每个单词的第一个字符进行大小写倒置?,java,regex,string,Java,Regex,String,输入是源文本,但每个单词的第一个字符(由三个或更多字符组成)的寄存器必须反转,并且该单词应被视为仅包含字母的序列(所有其他字符都不是单词的一部分)。 例如: 入口: 我年轻的时候 我从不需要 出口: 我年轻的时候 我从不需要 public static String upperWord(String input) { Pattern p = Pattern.compile("([\\p{InCyrillic}A-Za-z0-9-,]+\\s*)"); Matcher matche

输入是源文本,但每个单词的第一个字符(由三个或更多字符组成)的寄存器必须反转,并且该单词应被视为仅包含字母的序列(所有其他字符都不是单词的一部分)。 例如: 入口: 我年轻的时候 我从不需要 出口: 我年轻的时候 我从不需要

public static String upperWord(String input) {
    Pattern p = Pattern.compile("([\\p{InCyrillic}A-Za-z0-9-,]+\\s*)");
    Matcher matcher = p.matcher(input);
    StringBuilder builder = new StringBuilder();
    StringBuilder temp = new StringBuilder();
    while (matcher.find()) {
        temp.append(matcher.group());
        temp.setCharAt(0, String.valueOf(temp.charAt(0)).toUpperCase().charAt(0));
        builder.append(temp);
        temp.setLength(0);
    }
    return builder.toString();
}

下面是我的方法,可以进一步优化

  • 去拿绳子
  • 检查它是否为空
  • 如果不是空的,则根据空格分割句子,以便提取单个单词
  • 检查每个单词的第一个字符,并将其大小写颠倒
  • 将新词附加到结果字符串中
  • 将结果字符串返回给调用方法


  • 如果您使用的是Java 8,则可以通过
    字符.toUpperCase
    实现这一点,如下所示:

    String s0 = "When I was younger I never needed";
    List<String> s1 = Arrays.asList(s0.split("\\s+"))
            .stream()
            .map(token -> Character.toUpperCase(token.charAt(0)) + token.substring(1))
            .collect(Collectors.toList());
    
    System.out.println(String.join(" ", s1));
    
    String s0=“我年轻时从不需要”;
    列表s1=数组.asList(s0.split(\\s+))
    .stream()
    .map(token->Character.toUpperCase(token.charAt(0))+token.substring(1))
    .collect(Collectors.toList());
    System.out.println(String.join(“,s1));
    
    控制台输出为

    当我年轻的时候,我从不需要


    永远不需要应该永远不需要退出…?谢谢,但是如果您希望西里尔文文本也被处理,或者如何处理它(如果可能的话)?示例:输入:当我年轻时,我从未需要过输出:当我年轻时,我从未需要过
    String s0 = "When I was younger I never needed";
    List<String> s1 = Arrays.asList(s0.split("\\s+"))
            .stream()
            .map(token -> Character.toUpperCase(token.charAt(0)) + token.substring(1))
            .collect(Collectors.toList());
    
    System.out.println(String.join(" ", s1));