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

Posted

技术标签:

【中文标题】如何将包含字符转义序列的字符串转换为字符?【英文标题】:How can I convert a string containing a character escape sequence into a char? 【发布时间】:2012-02-02 21:22:18 【问题描述】:

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

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

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

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 中,相同参数下的输出完全不同,尤其是 " 非常混乱。

【问题讨论】:

How to convert/parse from String to char in java? 的可能重复项 如何向该问题添加问题?每个答案都是相同的,而不是回答问题......我觉得这更具体,尽管他确实想要和我一样。我也会尝试编辑他的问题。 你不能。你怎么觉得那里的答案对你没有帮助?确实是这样。 charAt(0) 在所有情况下都会给我 char '\' 而不是 '\n'、'\"' 或任何其他... 哦,字符串实际上是\n,长度为2?我误会了。 【参考方案1】:

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

【讨论】:

我认为这与我想要的完全相反,但这是一个好的开始,因为我想要一个 2 路实用程序。 在同一个类上试试 escapeJava 方法!它是双向的,如果您想要不同类型的转义,还有其他方法(例如 javascript、HTML 等)。 哦,抱歉,我没有看到既有逃生也有逃生,非常感谢我为这样的课程寻找了几个小时 public static java.lang.String unescapeJava(java.lang.String str) 取消转义在字符串中找到的任何 Java 文字。例如,它会将 '\' 和 'n' 的序列转换为换行符,除非 '\' 前面有另一个 '\'。参数:str - 要转义的字符串,可以为 null 返回:一个新的未转义的字符串,如果为空字符串输入则为 null 谢谢,如果您不介意,我将在所有未答复的帖子中使用您的答案。祝你有美好的一天

以上是关于如何将包含字符转义序列的字符串转换为字符?的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 包含正斜杠的字符串序列化 / 和 HTML 被错误地转义

php 数组转换json中括号转义

Python 2.7:如何将字符串中的 unicode 转义转换为实际的 utf-8 字符

idea还原转义json

将包含转义字符的字符串转换为dict

使用 VB Script RegExp 对象将 '\uA90F' 形式的 JSON Unicode 转义序列转换为 XML 字符引用