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

8
我正在寻找一种方法,可以将包含字符转义序列的字符串转换为表示的字符。
例如,我想解析字符串\"(其中包含反斜杠和双引号两个字符),并将其转换为一个字符"。所以,把多个字符的数组变成了一个字符。
因此需要有类似以下功能的程序:
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);

ch 输出: ";

感谢您阅读,如果不清楚,我会定期检查并进行更正。

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中,即使使用相同的参数,输出内容也完全不同,特别是引号非常混乱。

我该如何在那个问题下添加一个问题?每个答案都是相同的,没有回答我的问题...虽然他想要和我一样的东西,但我觉得这更具体。我也会尝试编辑他的问题。 - sinekonata
你无法做到。你对那里的答案感到不满意吗?看起来确实是这样。 - Michael Petrotta
charAt(0) 在所有情况下都将给我字符''而不是'\n'、'"'或任何其他... - sinekonata
是的,确实是通过文件或从主函数的args[]参数传递的。 - sinekonata
我稍微编辑了一下问题(我相信)以阐明您的意思。 - Michael Petrotta
显示剩余2条评论
1个回答

13

我认为这个程序完全相反于我的需求,但作为一个双向工具的起点还不错。 - sinekonata
尝试在同一类上使用escapeJava方法!它可以双向转义,如果您需要不同类型的转义,还有其他方法(如Javascript、HTML等)。 - Dan Hardiker
哦,抱歉我没看到有转义和非转义两种方式,非常感谢,我找了好几个小时才找到这样的类。 - sinekonata
public static java.lang.String unescapeJava(java.lang.String str)该方法用于反转义字符串中的Java字面量。例如,它将把 '' 和 'n' 的序列转换为换行符,除非 '' 前面有另一个 ''。参数: str - 要反转义的字符串,可以为null返回值: 一个新的未转义字符串,如果输入为空则返回null - Dan Hardiker
谢谢,如果您不介意的话,我会在所有未回答的帖子中使用您的答案。祝您有美好的一天。 - sinekonata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接