Лучший способ заменить строку на строку, содержащую обратную косую черту (\) - PullRequest
2 голосов
/ 17 августа 2010

Я пытаюсь обновить сохраненную учетную запись NT (домен \ пользователь) новой учетной записью.Новая учетная запись поставляется в виде объекта String.

Я вызываю мой метод replaceAccount, чтобы выполнить это, запустив эту строку:

tempAcct.setDefinition(ExtractNTAccount.matcher(tempAcct.getDefinition()).replaceFirst("nt=\""+newNTLogin+"\""));

Если учетной записью NT является «HOME \ jdoe», иЗатем я вывожу поле определения tempAcct, вместо этого я вижу логин NT как "HOMEjdoe".

Проверяя метод javadoc replaceFirst, можно прочитать следующее:

"Примечаниечто обратная косая черта () и знаки доллара ($) в строке замены могут привести к тому, что результаты будут отличаться от результатов, которые можно было бы обработать как строку замещения литерала; см. Matcher.replaceFirst (java.lang.String).java.lang.String) для подавления специального значения этих символов, если это необходимо. "

Итак, я обнаружил, что если вместо передачи учетной записи NT как есть (" HOME \ jdoe") Я передаю " HOME "+ Matcher.quoteReplacement (" \\ ") +" jdoe " или " HOME \\\\ jdoe ", после чего я получаю правильные результатыиспользуя метод replaceFirst.

Это лучший методмы можем использовать, или я совершенно не понимаю, как использовать метод Matcher.quoteReplacement ()?

1 Ответ

2 голосов
/ 17 августа 2010

Аргумент replaceFirst() рассматривается как выражение, где $ и \ имеют особое значение. Если вы хотите, чтобы вместо этого она воспринималась как буквальная строка, заключите ее в кавычки Matcher.quoteReplacement():

tempAcct.setDefinition(ExtractNTAccount.matcher(
    tempAcct.getDefinition()).replaceFirst(
         Matcher.quoteReplacement("nt=\"" + newNTLogin + "\""))); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...