如何将String转换为Java字符串文字?

时间:2010-03-16 09:36:45

标签: java string

这是this question about C#的Java类似物。

假设我有一个String对象,我想在代码中表示,我想生成一个映射到同一个东西的字符串文字。

实施例

hello, "world"
goodbye

变为

hello, \"world\"\ngoodbye

我正准备编写一个状态机,逐个摄取字符串并适当地转义,但后来我想知道是否有更好的方法,或者提供了执行此操作的函数库。

2 个答案:

答案 0 :(得分:6)

如果你可以添加外部代码,Apache的Commons Lang有EscapeStringUtils.escapeJava(),我认为这正是你想要的。

答案 1 :(得分:4)

我天真的状态机实现如下:

public String javaStringLiteral(String str)
{
    StringBuilder sb = new StringBuilder("\"");
    for (int i=0; i<str.length(); i++)
    {
        char c = str.charAt(i);
        if (c == '\n')
        {
            sb.append("\\n");
        }
        else if (c == '\r')
        {
            sb.append("\\r");
        }
        else if (c == '"')
        {
            sb.append("\\\"");
        }
        else if (c == '\\')
        {
            sb.append("\\\\");
        }
        else if (c < 0x20)
        {
            sb.append(String.format("\\%03o", (int)c));
        }
        else if (c >= 0x80)
        {
            sb.append(String.format("\\u%04x", (int)c));
        }
        else
        {               
            sb.append(c);
        }
    }
    sb.append("\"");
    return sb.toString();
}