Есть ли функция Java, которая анализирует экранированные символы? - PullRequest
8 голосов
/ 25 августа 2009

Я ищу встроенные функции Java, которые, например, могут конвертировать "\\n" в "\n".

Примерно так:

assert parseFunc("\\n") = "\n"

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

Ответы [ 4 ]

9 голосов
/ 21 октября 2011

Вы можете использовать StringEscapeUtils.unescapeJava(s) из Apache Commons Lang . Он работает для всех escape-последовательностей, включая символы Юникода (т.е. \u1234).

https://commons.apache.org/lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html#unescapeJava-java.lang.String-

3 голосов
/ 25 августа 2009

Энтони прав на 99% - поскольку обратный слеш также является зарезервированным символом в регулярных выражениях, его необходимо экранировать во второй раз:

result = myString.replaceAll("\\\\n", "\n");
1 голос
/ 25 августа 2009

Просто используйте собственный метод replaceAll для строк.

result = myString.replaceAll("\\n", "\n");

Однако, если вы хотите сопоставить все escape-последовательности, вы можете использовать Matcher. См. http://www.regular -expressions.info / java.html для очень простого примера использования Matcher.

Pattern p = Pattern.compile("\\(.)");
Matcher m = p.matcher("This is tab \\t and \\n this is on a new line");
StringBuffer sb = new StringBuffer();
while (m.find()) {
   String s = m.group(1);
   if (s == "n") {s = "\n"; }
   else if (s == "t") {s = "\t"; } 
   m.appendReplacement(sb, s);
}
m.appendTail(sb);
System.out.println(sb.toString());

Вам просто нужно сделать назначение более сложным в зависимости от количества и типа побегов, которые вы хотите обработать. (Предупреждение, что это воздушный код, я не Java-разработчик)

0 голосов
/ 01 октября 2014

Если вы не хотите перечислять все возможные экранированные символы, вы можете делегировать это в Свойства поведения

    String escapedText="This is tab \\t and \\rthis is on a new line";
    Properties prop = new Properties();     
    prop.load(new StringReader("x=" + escapedText + "\n"));
    String decoded = prop.getProperty("x");
    System.out.println(decoded);

Этот дескриптор всех возможных символов

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