Ви можете використовувати String unescapeJava(String)метод StringEscapeUtilsвід Apache Commons Lang .
Ось приклад фрагмента:
String in = "a\\tb\\n\\\"c\\\"";
System.out.println(in);
String out = StringEscapeUtils.unescapeJava(in);
System.out.println(out);
Клас утиліти має методи екранувань та невдалих рядків для Java, Java Script, HTML, XML та SQL. Він також має перевантаження, які записують безпосередньо в java.io.Writer.
Застереження
Схоже, StringEscapeUtilsобробляє втечу Unicode з одним u, але не восьмеричне, або втікання Unicode із сторонніми us.
System.out.println(
"\u0030"
);
System.out.println(
StringEscapeUtils.unescapeJava("\\u0030")
);
System.out.println(
"\u0030".equals(StringEscapeUtils.unescapeJava("\\u0030"))
);
System.out.println(
"\45"
);
System.out.println(
StringEscapeUtils.unescapeJava("\\45")
);
System.out.println(
"\45".equals(StringEscapeUtils.unescapeJava("\\45"))
);
System.out.println(
"\uu0030"
);
System.out.println(
StringEscapeUtils.unescapeJava("\\uu0030")
);
Цитата з JLS:
Вісімкові пагони передбачені для сумісності з С, але може висловити тільки значення Unicode \u0000через \u00FF, тому вислизає Unicode, як правило , кращі.
Якщо ваш рядок може містити вісімкові екранування, ви можете спершу перетворити їх на екрани Unicode або скористатися іншим підходом.
Стороннє uтакож документується наступним чином:
Мова програмування Java визначає стандартний спосіб перетворення програми, написаної в Unicode, у ASCII, що змінює програму у форму, яку можна обробляти засобами на базі ASCII. Трансформація передбачає перетворення будь-якого екрану Unicode у вихідному тексті програми в ASCII, додавши додатковийu приклад, \uxxxxстає\uuxxxx -одночасно перетворюючи символи, що не є ASCII у вихідному тексті, в екрануючі Unicode, що містять по одному u.
Ця трансформована версія є однаково прийнятною для компілятора мови програмування Java і представляє абсолютно ту саму програму. Точне джерело Unicode можна згодом відновити з цієї форми ASCII, перетворивши кожну послідовність виходів, де кількаu символів, у послідовність символів Unicode з одним меншим числом u, одночасно перетворюючи кожну послідовність переходів з одного uна відповідний одиночний символ Unicode.
Якщо ваш рядок може містити переходи Unicode із сторонніми u , можливо, вам також доведеться попередньо обробити це перед використанням StringEscapeUtils.
Крім того, ви можете спробувати написати власний буквальний рядок Java, що не перетворюється, з нуля, дотримуючись точних специфікацій JLS.
Список літератури