Это - вид аналога Java этого вопроса о C#.
Предположим, что у меня есть a String
объект, который я хочу представить в коде и я хочу произвести строковый литерал, который отображается на то же самое.
Пример
hello, "world"
goodbye
становится
hello, \"world\"\ngoodbye
Я как раз собирался записать конечный автомат, который поглощает символ строки символом и выходит соответственно, но затем я задался вопросом, был ли лучший путь или библиотека, которая обеспечивает функцию, чтобы сделать это.
Если вы можете добавить внешний код, Apache Commons Lang имеет 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();
}