这有点类似于C#的这个问题的Java版本。
假设我有一个String
对象,我想在代码中表示它,并且我想生成一个字符串字面量,该字面量映射到相同的内容。
示例:
hello, "world"
goodbye
变成
hello, \"world\"\ngoodbye
我正打算编写一个状态机,对字符串进行逐个字符的读取,并进行适当的转义处理,但是我想知道是否有更好的方法或者提供此功能的库。
StringEscapeUtils.escapeJava()
的方法,我认为正是您想要的。我天真的状态机实现看起来像这样:
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();
}