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

Convert Strings to Character Escapes and Unicode without StringEscapeUtils

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

这一切都很好,但是现在我正处于一旦收到这些转义符的地步,我想将它们转换为它们的 actual 转义符。例如,\n 字面上转换为换行符。

我知道我可以使用 Apache 的 StringEscapeUtils,但出于多种原因我不同意他们的许可,无论如何我宁愿自己做。

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

switch (character) {
case 'n': return '\n';
case 't': return '\t';
default:  return '[=10=]';
}

但我希望能够解析 45346\u3456 之类的内容,Java 将接受这些内容作为有效条目,而无需编写 每个可能的条目组合。我可以对这些东西进行正则表达式处理,但我希望能够 将它们解析为字面值。

有什么办法可以实现吗?

这可以通过滥用 Properties class 轻松完成,它实际上会为您正确解析字符串数据和格式。

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

这会将转义码作为字符串接收,将其加载到属性中,对其进行解析,然后 return 更正后的字符。

该函数支持 Unicode 转义和常规转义,正如问题所要求的那样。