如何将包含字符转义序列的字符串转换为char?

时间:2012-01-05 00:11:37

标签: java string parsing encoding char

我正在寻找一种方法将包含字符转义序列的字符串转换为表示的字符。

因此,例如,我想将字符串\"(有两个字符,反斜杠和双引号)解析为char "。所以,一组字符变成一个字符。

所以可能会做这样的事情,反之亦然:

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或其他任何可以为我提供良好(可能是本机)代码的东西,因为我觉得上面的代码可能不完整而且没有解析每个有问题(可逃避的?)字符,因为我是个菜鸟。 我想要一个可以与String构造函数做同样事情的工具:

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

输出:“;

感谢您阅读此内容,如果不清楚,我很抱歉,如果被要求,我会定期检查并更正。

PS

当我运行上面的代码时:

  

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

...输出

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

但在Eclipse中,输出与相同的参数完全不同,尤其是“非常混乱。”

1 个答案:

答案 0 :(得分:13)

Apache Commons使用StringEscapeUtils进行救援,你想要我认为的unescapeJava方法:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html#unescapeJava(java.lang.String)