Каково использование метода Pattern.quote?

Я пытаюсь понять Pattern.quote используя следующий код:

 String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545"); System.out.println("Pattern is : "+pattern); 

производит выход:

 Pattern is : \Q1252343% 8 567 hdfg gf^$545\E 

Что здесь \Q и \E ? В описании документации говорится:

Возвращает литерал String для указанной String .

Этот метод создает String которая может быть использована для создания Pattern который будет соответствовать строке s как если бы это был буквенный шаблон.

Метасимволы или escape-последовательности во входной последовательности не будут иметь особого значения.

Но возвращаемым типом Pattern.quote является String а не скомпилированный объект Pattern .

Зачем нужен этот метод и какие примеры использования?

    \Q означает «начало буквального текста» (т. Е. Регулярное выражение «открытая цитата»)
    \E означает «конец буквального текста» (т. \E Регулярное выражение «закрыть цитату»)

    Вызов Pattern.quote() обертывает строку в \Q...\E , которая превращает текст в литерал регулярного выражения. Например, Pattern.quote(".*") Будет соответствовать точке, а затем звездочке:

     System.out.println("foo".matches(".*")); // true System.out.println("foo".matches(Pattern.quote(".*"))); // false System.out.println(".*".matches(Pattern.quote(".*"))); // true 

    objective метода состоит в том, чтобы не требовать от программиста запоминания специальных терминов \Q и \E и добавить немного читаемости в код – регулярное выражение достаточно сложно читать. Для сравнения:

     someString.matches(Pattern.quote(someLiteral)); someString.matches("\\Q" + someLiteral + "\\E")); 

    Ссылаясь на javadoc :

    Возвращает литерал String для указанной строки.

    Этот метод создает строку, которая может быть использована для создания шаблона, который будет соответствовать строке s, как если бы это был буквенный шаблон.

    Метасимволы или escape-последовательности во входной последовательности не будут иметь особого значения.

    Метод Pattern.quote цитирует часть шаблона регулярного выражения, чтобы заставить регулярное выражение интерпретировать его как строковые литералы.

    Скажите, что у вас есть пользовательский ввод в вашей поисковой программе, и вы хотите повторно использовать его. Но этот вход может содержать небезопасные символы, поэтому вы можете использовать

     Pattern pattern = Pattern.compile(Pattern.quote(userInput)); 

    Этот метод не цитирует Pattern но, как вы указываете, обертывает String в выражениях regex.

    \Q и \E , среди всех других, подробно описаны на странице java.util.regex.Pattern Javadoc. Они означают «begin Q uote», « E nd quote» и разметить область, где все символы имеют буквальное значение. Способ использования возврата Pattern.quote заключается в том, чтобы Pattern.compile его в Pattern.compile или любой другой метод, который принимает строку шаблона, такую ​​как String.split .

    Если вы скомпилируете String, возвращаемую Pattern.quote , вы получите Pattern который соответствует буквенной строке, которую вы quote d.

    \Q и \E отмечают начало и конец цитируемой части строки.

    Регулярно сталкивается с обычными строками. Скажем, я хочу, чтобы регулярное выражение искало определенную строку, которая известна только во время выполнения. Как мы можем быть уверены, что строка не имеет значения регулярного выражения, например ( ".*.*.*" )? Мы цитируем это.

    Interesting Posts

    прекратить навигацию по угловому ui-маршрутизатору до тех пор, пока не будет разрешено promise

    Ширина кнопок панели задач Windows

    Удалите оборудование из списка «безопасно удалите оборудование» в Windows 7

    Использование Swift CFunctionPointer для передачи обратного вызова API CoreMIDI

    Как включить EF-миграции для разных контекстов для разделения баз данных?

    Скрыть программу C # из диспетчера задач?

    Java-пакеты com и org

    Chrome останавливается при выполнении нескольких запросов на один ресурс?

    Должен ли я объявлять ObjectMapper jacksonа как статическое поле?

    Можете ли вы использовать псевдоним в предложении WHERE в mysql?

    Зачем использовать SwingUtilities.invokeLater в основном методе?

    Определение направления / местоположения Wifi

    Карта Caps-Lock для управления в Windows 8.1

    «Android-обновление sdk» на безголовом Linux

    Vista 64-битное уведомление systray «Windows обнаружила, что ваша производительность медленная»

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