Java эквивалент оператора Perl ///? - PullRequest
6 голосов
/ 12 февраля 2010

У меня есть код, который я конвертирую из Perl в Java. Это довольно интенсивно использует регулярные выражения, включая оператор s///. Я давно пользуюсь Perl и до сих пор привыкаю к ​​Java. В частности, с Strings сложнее работать. Кто-нибудь знает или имеет функцию Java, которая полностью реализует s///? Чтобы он мог обрабатывать что-то вроде этого, например:

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

(Может быть, не лучший пример, но вы поняли.) Спасибо.

Ответы [ 3 ]

6 голосов
/ 12 февраля 2010

Ничего такого аккуратного, но в Java вы бы использовали String.replaceAll () или Pattern , чтобы сделать что-то вроде:

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

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

Проверьте шаблоны документов на наличие синтаксиса регулярных выражений Java - он не полностью перекрывается с Perl.


Чтобы получить заглавные буквы, проверьте Matcher.appendReplacement:

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

Не так близко к Perl, как указанная выше библиотека jakarta-oro, но определенно некоторая помощь встроена в библиотеку.

1 голос
/ 12 февраля 2010

Для экземпляра класса String вы можете использовать метод .replaceAll () следующим образом:

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

Редактировать - хорошо, слишком медленно. Также очевидно, что \ U не поддерживается согласно другому ответу.

Примечание. Я не уверен, как переводится жадный символ, вы можете попробовать реализовать реализацию Java, если вам это необходимо.

1 голос
/ 12 февраля 2010

Взгляните на метод String replaceAll (...) . Обратите внимание, что Java не поддерживает функцию \U (в верхнем регистре).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...