Java相当于Perl的///运算符?

时间:2010-02-12 20:30:35

标签: java regex perl

我有一些代码,我正在从Perl转换为Java。它大量使用正则表达式,包括s///运算符。我已经使用Perl很长一段时间了,我仍然习惯于Java的做事方式。特别是,Strings似乎更难以使用。有没有人知道或拥有完全实现s///的Java函数?所以它可以处理这样的事情,例如:

$newString =~ s/(\bi'?\b)/\U$1/g;

(也许不是一个很好的例子,但你明白了。)谢谢。

3 个答案:

答案 0 :(得分:6)

没有什么比这更整洁,但在Java中你可以使用String.replaceAll()或使用Pattern来做类似的事情:

Pattern p = Pattern.compile("(\bi'?\b)");

Matcher m = p.matcher(stringToReplace);
m.replaceAll("$1");

检查Pattern文档中的Java正则表达式语法 - 它与Perl完全不重叠。


要获得大写字母,请查看Matcher.appendReplacement

StringBuffer sb = new StringBuffer();
while (m.find()) {
    String uppercaseGroup = m.group(1).toUpperCase();
    m.appendReplacement(sb, uppercaseGroup);
}
m.appendTail();

不像上面引用的jakarta-oro库那样接近Perl,但肯定会在库中内置一些帮助。

答案 1 :(得分:1)

查看String的replaceAll(...)方法。请注意,Java不支持\U(大写)功能。

答案 2 :(得分:1)

给定一个String类的实例,您可以使用.replaceAll()方法,如下所示:

String A = "Test";
A.replaceAll("(\bi'?\b)","\U$1");

编辑 - 确定太慢了。显然也是\根据另一个答案不支持。

注意 - 我不确定贪婪符号是如何转换的,如果你需要特别的话,你可能想尝试研究Java的实现。