首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Regex To Uppercase

Java Regex To Uppercase
EN

Stack Overflow用户
提问于 2014-02-11 17:10:11
回答 4查看 7K关注 0票数 4

所以我有一根绳子

2000 for车辆翻新发动机

我想把这个变成

2000 for车辆翻新发动机

2000毫升上有大写字母cc。我显然不能做text.replaceAll("cc","CC");,因为它将用大写版本替换cc的所有出现,因此单词加速器将变成aCCelerator。在我的场景中,前面的四个数字总是四位,后面跟着字母cc,所以我认为这可以用regex来完成。

我的问题是,在Java中,当cc跟随4位数并获得预期的结果时,如何将CC转换为CC?

代码语言:javascript
复制
String text = text.replaceAll("[0-9]{4}[c]{2}", "?");
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-11 17:16:40

如果您只需将cc转换为大写,并且它是固定的,那么您只需将匹配替换为CC

在Java中没有这方面的单行通用解决方案。你必须用Matcher#appendReplacement()Matcher#appendTail()做这件事

代码语言:javascript
复制
String str = "Refurbished Engine for 2000cc Vehicles";
Pattern pattern = Pattern.compile("\\d{4}cc");
Matcher matcher = pattern.matcher(str);

StringBuffer result = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(result, matcher.group().toUpperCase());
}

matcher.appendTail(result);

System.out.println(result.toString());
票数 4
EN

Stack Overflow用户

发布于 2014-02-11 17:14:38

你可以试试

代码语言:javascript
复制
text = text.replaceAll("(\\d{4})cc", "$1CC");
//                          ↓          ↑
//                          +→→→→→→→→→→+

技巧是将数字放在组中(通过括号),然后在替换部分(通过$xx是组号)中使用此组中的匹配。

如果希望确保匹配的文本不是其他单词的一部分,则可以使用字界 "\\b"包围该正则表达式。还可以使用看-阿登机制来确保匹配文本之前和/或之后没有字母数字字符。

票数 7
EN

Stack Overflow用户

发布于 2014-02-11 17:15:18

一种方法是将数字部分捕获为带有()的组,然后在替换中使用对该组的反向引用:

这是经过测试的:

代码语言:javascript
复制
public static void main(String [] args) {
    String s = "1000cc abc 9999cc";
    String t = s.replaceAll("(\\d{4})cc", "$1CC");
    System.err.println(t);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21708412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档