我有一些代码,我正在从Perl转换为Java。它大量使用正则表达式,包括s///
运算符。我已经使用Perl很长一段时间了,我仍然习惯于Java的做事方式。特别是,Strings似乎更难以使用。有没有人知道或拥有完全实现s///
的Java函数?所以它可以处理这样的事情,例如:
$newString =~ s/(\bi'?\b)/\U$1/g;
(也许不是一个很好的例子,但你明白了。)谢谢。
答案 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的实现。