替换所有捕获的组

发布于 2024-11-25 03:13:09 字数 279 浏览 0 评论 0原文

我需要将 "foo_bar_baz_2" 转换为 "fooBarBaz2"

我正在尝试使用此模式:

Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

是否可以使用 matcher将第一个捕获的组(“_”后面的字母)替换为大写的捕获组?

I need to transform something like: "foo_bar_baz_2" to "fooBarBaz2"

I'm trying to use this Pattern:

Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

Is it possible to use matcher to replace the first captured group (the letter after the '_') with the captured group in upper case?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

原谅过去的我 2024-12-02 03:13:09

您可以使用匹配器的appendReplacement/appendTail方法,如下所示:

Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

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

System.out.println(stringBuffer.toString());

You can use appendReplacement/appendTail methods of the matcher like this:

Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

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

System.out.println(stringBuffer.toString());
温柔嚣张 2024-12-02 03:13:09

是的。替换为 \U$1\E - 表示为 Java 字符串 "\\U$1\\E"

只要您的正则表达式中没有其他内容,您就可以转储\E 并缩短为 \U$1


考虑到 @TimPietzcker 的评论,您的正则表达式本身应该是 "_([a-z0-9])"

Yes. Replace with \U$1\E - represented as in Java string "\\U$1\\E"

As long as there is nothing else in your regex, you can dump the \E and shorten to \U$1.


Taking @TimPietzcker's comment into account, your regex itself should be "_([a-z0-9])".

錯遇了你 2024-12-02 03:13:09
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文