Java中能否通过Matcher的正则替换字符串实现字符串转大写?
Java中用Matcher.replaceAll实现全大写转换的替代方案
首先直接明确:Java的正则替换字符串不支持Perl里的\U这种大小写转换标记,这点在Pattern类的文档“与Perl的差异”部分已经说明,所以没法像部分编辑器或Perl那样直接用\U加匹配组的方式实现转换。
如果想通过Matcher.replaceAll()完成把输入字符串(比如Hello world!)转成HELLO WORLD!的需求,有两种实用的替代方法:
1. 函数式替换(推荐,Java 9+)
用Java 9新增的replaceAll(Function<MatchResult, String>)重载方法,直接在lambda里把匹配到的内容转大写:
String input = "Hello world!"; // 这里用".+"匹配整个字符串,如果你要转特定子串,调整正则即可 String result = Pattern.compile(".+") .matcher(input) .replaceAll(match -> match.group().toUpperCase()); // 输出结果:HELLO WORLD!
比如你只想转单词部分,把正则改成\\w+就能只对每个单词做大写转换。
2. 手动拼接结果(Java 8及更早版本)
如果用的是Java 8或更老的版本,就用appendReplacement和appendTail手动处理每个匹配项:
String input = "Hello world!"; Matcher matcher = Pattern.compile(".+").matcher(input); StringBuffer sb = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sb, matcher.group().toUpperCase()); } matcher.appendTail(sb); String result = sb.toString(); // 输出结果:HELLO WORLD!
简单说,Java没有直接对应Perl\U的替换语法,必须通过代码逻辑对匹配结果做大小写转换才能实现需求。
内容的提问来源于stack exchange,提问作者Vamshi
相关产品推荐
相关产品推荐

