Ви можете використовувати 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 із сторонніми u
s.
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.
Список літератури