不使用StringEscapeUtils将字符串转换为字符转义和Unicode

时间:2017-02-19 03:23:55

标签: java string escaping unicode-escapes

我正在做一些正则表达式来拆分一些字符串并从中提取Unicode和正常转义(基本上是Java接受的任何转义),然后我想通过一个方法解析它们。

这一切都很好,但是现在我已经收到了这些转义,我想将它们转换为实际的转义。例如,//Specify default value const b = [ { key: true }, { key: true }, { key: true }, { key: true }, { key: true } ] [1, 3].forEach((x) => { b[x].key = false; }) 字面上会转换为换行符。

我知道我可以使用Apache的\n,但由于多种原因我不同意他们的许可,而且无论如何我宁愿能够自己做。

根据我的理解,我可以简单地做这样的事情:

StringEscapeUtils

但是我希望能够解析像switch (character) { case 'n': return '\n'; case 't': return '\t'; default: return '\0'; } \0345346这样的东西,Java将接受这些东西作为有效条目,而无需编写每个单一可能的组合。我可以正确地使用这些东西,但我希望能够将它们解析为字面值。

有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

这可以通过滥用Properties类来轻松完成,它将实际解析字符串数据并为您正确格式化。

private char escapeCharacter(String data) {
    Properties p = new Properties();
    try {
        p.load(new StringReader("key=" + data));
    } catch (IOException e) {
        e.printStackTrace();
        return '\0';
    }
    return p.getProperty("key").charAt(0);
}

这将转义代码作为String,将其加载到属性中,解析它,并返回更正的char。

该函数支持Unicode转义和常规转义,如问题所示。