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));