Используйте Java и RegEx для преобразования оболочки в строку

Проблема: Поворот

"My Testtext TARGETSTRING My Testtext" 

в

 "My Testtext targetstring My Testtext" 

Perl поддерживает «\ L» -операцию, которая может использоваться в заменяющей строке.

Класс-class не поддерживает эту операцию:

Конструкции Perl не поддерживаются этим classом: […] Операции предварительной обработки \ l \ u, \ L и \ U. https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html

    Вы не можете сделать это в Java regex. Вам придется вручную выполнить пост-обработку с использованием String.toUpperCase() и toLowerCase() .

    Вот пример того, как вы используете регулярное выражение для поиска и использования слов длиной не менее 3 в предложении

      String text = "no way oh my god it cannot be"; Matcher m = Pattern.compile("\\b\\w{3,}\\b").matcher(text); StringBuilder sb = new StringBuilder(); int last = 0; while (m.find()) { sb.append(text.substring(last, m.start())); sb.append(m.group(0).toUpperCase()); last = m.end(); } sb.append(text.substring(last)); System.out.println(sb.toString()); // prints "no WAY oh my GOD it CANNOT be" 

    Примечание по appendReplacement и appendTail

    Обратите внимание, что в приведенном выше решении используется substring и управляется tail индексом и т. Д. На самом деле вы можете обойтись без них, если используете Matcher.appendReplacement и appendTail .

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

    Обратите внимание, что теперь sb является StringBuffer вместо StringBuilder . Пока Matcher обеспечит перегрузки StringBuilder , вы будете придерживаться более медленного StringBuffer если хотите использовать эти методы.

    Вам решать, стоит ли компромисс в меньшей эффективности для повышения читаемости или нет.

    Смотрите также

    • StringBuilder и StringBuffer в Java

    Вы можете использовать группу захвата regexp (если вам действительно нужно использовать регулярное выражение, то есть, если « TARGETSTRING » достаточно сложный и «регулярный», чтобы оправдать обнаружение регулярным выражением).
    Затем вы должны применить toLowerCase() к группе # 1.

     import java.util.regex.*; public class TargetToLowerCase { public static void main(String[] args) { StringBuilder sb= new StringBuilder( "my testtext TARGETSTRING my testtext"); System.out.println(sb); String regex= "TARGETSTRING "; Pattern p = Pattern.compile(regex); // Create the pattern. Matcher matcher = p.matcher(sb); // Create the matcher. while (matcher.find()) { String buf= sb.substring(matcher.start(), matcher.end()).toLowerCase(); sb.replace(matcher.start(), matcher.end(), buf); } System.out.println(sb); } } 

    Java9 +

    Из Java 9+ вы можете использовать String :: replaceAll, где вы можете использовать Function например, мы используем пример полигенных смазочных материалов :

     String text = "this is just a test which upper all short words"; String regex = "\\b\\w{0,3}\\b"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); String result = matcher.replaceAll(matche -> matche.group().toUpperCase()); System.out.println(result); 

    Или просто :

     String result = Pattern.compile(regex) .matcher(text) .replaceAll(matche -> matche.group().toUpperCase()); 

    Вывод

     this IS just A test which upper ALL short words ^^ ^ ^^^ 

    Чтобы сделать это на уровне регулярного выражения, вы должны использовать \U для переключения в верхнем регистре и \E чтобы отключить его. Ниже приведен пример использования этой функции в диалоговом окне find-and-replace IntelliJ IDEA, которое преобразует набор полей classа в утверждения JUnit (при всплывающей подсказке IDE результат преобразования find-and-replace ):

    введите описание изображения здесь

    Interesting Posts

    Доступ к внешнему компьютеру без переадресации портов

    Удаление нескольких столбцов из R data.table с параметром для удаления столбцов

    Как предотвратить System.Xml.XmlException: недопустимый символ в данной кодировке

    Переменная префикса Springpathpath

    Скрыть кнопки TabControl для управления сложными панелями

    Проверка жесткого диска с использованием инструментов dd и md5sum

    Как отключить отслеживание изменений в автоматическом режиме в Word?

    Как правильно назначить новое строковое значение?

    Как регулярные выражения работают в htaccess для перенаправления диапазона IP

    Bash: есть ли способ поиска определенной строки в каталоге файлов?

    Можете ли вы объяснить, как понять, что отображает команда «iwconfig» в Ubuntu-9.04?

    Возможно ли напечатать тип переменной в стандартном C ++?

    VB.NET – IsNothing против нет ничего

    Расположение файла my.cnf на macOS

    Обслуживание favicon.ico в ASP.NET MVC

    Давайте будем гением компьютера.