Как Вы преобразовали бы Строку в строковый литерал Java?

Это - вид аналога Java этого вопроса о C#.

Предположим, что у меня есть a String объект, который я хочу представить в коде и я хочу произвести строковый литерал, который отображается на то же самое.

Пример

hello, "world"
goodbye

становится

hello, \"world\"\ngoodbye

Я как раз собирался записать конечный автомат, который поглощает символ строки символом и выходит соответственно, но затем я задался вопросом, был ли лучший путь или библиотека, которая обеспечивает функцию, чтобы сделать это.

10
задан Community 23 May 2017 в 12:31
поделиться

2 ответа

Если вы можете добавить внешний код, Apache Commons Lang имеет StringEscapeUtils.escapeJava () , который, я думаю, делает именно то, что вы хотите.

7
ответ дан 4 December 2019 в 01:00
поделиться

Моя наивная реализация конечного автомата выглядит так:

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();
}
4
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: