Как я могу преобразовать строку, содержащую escape-последовательность символов, в символ? - PullRequest
7 голосов
/ 05 января 2012

Я ищу способ преобразования строки, содержащей escape-последовательность символов, в представляемый символ.

Так, например, я хочу проанализировать строку \" (которая состоит из двух символов), обратный слеш и двойные кавычки) в символ ".Итак, массив символов в один символ.

Итак, что-то, что может сделать что-то подобное и наоборот:

package test;
public class Test {
    private static char parseChar(String string) {
        char c = 0;
        if ("\\n".equals(string)) {
            c = '\n';
        }else if ("\\t".equals(string)) {
            c = '\t';
        }else if ("\\r".equals(string)) {
            c = '\r';
        }else if ("\\f".equals(string)) {
            c = '\f';
        }else if ("\\b".equals(string)) {
            c = '\b';
        }else if ("\\\'".equals(string)) {
            c = '\'';
        }else if ("\\\"".equals(string)) {
            c = '\"';
        }else if ("\\\\".equals(string)) {
            c = '\\';
        }
        return c;
    }
    public static void main(String[] args) {
        for (String arg : args) {
            System.out.println(arg + " : " + (int)parseChar(arg) + " : " + parseChar(arg) + ";");
        }
    }
}

Я не мог поверить, что в java.lang или другом нет ничегоэто может дать мне хороший (возможно, нативный) код для этого, потому что я чувствую, что приведенный выше код может быть неполным и не анализировать каждый проблемный (escape-?) символ, потому что я - нуб.Мне нужен инструмент, который может делать то же самое, что и конструктор String:

String st = "\"";
char ch = st.charAt(0);

ch output: ";

Спасибо, что прочитали это, извинитеесли не ясно, я буду регулярно проверять и исправлять, если будет предложено.

PS :

Когда я запускаю вышеуказанный код:

java -classpath ~ / workspace / MacroRecorder / bin / test.Test \\ n \\ t \\ f \\ r \\ b \\\ '\\\ "\\\\;

...it output

\n : 10 : 
;
\t : 9 :    ;
\f : 12 : 
          ;
;r : 13 : 
\b : 8 :;
\' : 39 : ';
\" : 34 : ";
\\ : 92 : \;

Но в Eclipse выходные данные совершенно разные с теми же параметрами, особенно "очень грязный".

1 Ответ

13 голосов
/ 05 января 2012

Apache Призывает на помощь с помощью StringEscapeUtils, вам нужен метод unescapeJava, я думаю: http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html#unescapeJava(java.lang.String)

...