2017-02-19 104 views
2

Я занимаюсь некоторым регулярным выражением, чтобы разделить некоторые строки и извлечь из них как Unicode, так и нормальные escape-последовательности (в основном, любой escape, принятый Java), а затем я хочу их проанализировать с помощью метода.Преобразование строк в символы Escapes и Unicode без StringEscapeUtils

Это все работает отлично, однако теперь я нахожусь в точке, где после того, как эти побеги были получены, я хочу превратить их в их фактический побег. Например, \n буквально преобразуется в новую строку.

Я знаю, что могу использовать Apache StringEscapeUtils, но я не согласен с их лицензией по нескольким причинам и, скорее всего, смогу сделать это сам.

Из моего понимания, я могу просто сделать что-то вроде этого:

switch (character) { 
case 'n': return '\n'; 
case 't': return '\t'; 
default: return '\0'; 
} 

Но я хочу, чтобы быть в состоянии разобрать вещи, как \0345346 и \u3456, что Java будет принимать в действительные записи, без записи каждый, одиночный возможный комбинация. Я могу regex эти вещи просто отлично, но я хочу иметь возможность проанализировать их в своих буквальных значениях.

Есть ли способ, которым я могу добиться этого?

ответ

0

Это можно легко сделать, нарушив класс Properties, который фактически проанализирует данные и формат строки для вас.

private char escapeCharacter(String data) { 
    Properties p = new Properties(); 
    try { 
     p.load(new StringReader("key=" + data)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return '\0'; 
    } 
    return p.getProperty("key").charAt(0); 
} 

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

Функция поддерживает escape-последовательности Unicode и обычные экраны, как задает вопрос.