Java, эквивалентный из s Perl///оператор?

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

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

(Возможно, не яркий пример, но Вы получаете идею.) Спасибо.

6
задан Bart Kiers 12 February 2010 в 21:20
поделиться

3 ответа

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

1
ответ дан 16 December 2019 в 21:39
поделиться

Ничего такого аккуратного, но в 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, но определенно некоторая помощь встроена в библиотеку.

6
ответ дан 16 December 2019 в 21:39
поделиться

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

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

Edit - ok too slow. Также, очевидно, \U не поддерживается, согласно другому ответу.

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

1
ответ дан 16 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: