Как отображать средства форматирования строк в виде обычного текста в Java?

У меня есть строка на Java, содержащая специальные символы, такие как \n и \t, которые интерпретируются как управляющие символы и при отображении создают новые строки и вкладки. Я хочу отображать эти специальные символы как обычный текст, например, отображать "\n" как \n, а не как новую строку. Строка также может содержать одинарные или двойные кавычки (')("), для краткости она может содержать любой возможный символ.

String text = "Hello\nWorld!";
text = text.replace("\\", "\\\\");
text = text.replace("\n", "\\n");
System.out.println(text);

Есть ли способ добиться этого в Java?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У Apache Commons есть библиотека для того, что вы, кажется, ищете: https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringEscapeUtils.html# escapeJava(java.lang.String)

Если вы не можете использовать Maven/Gradle, вам, скорее всего, придется прибегнуть к собственному сворачиванию, экранируя все специальные символы обратной косой чертой, т.е. что-то вроде:

public static void main(String[] args) {
    String text = "Hello\nWorld!";
    String escapedText = escapeSpecialChars(text);
    System.out.println(escapedText);
}

private static String escapeSpecialChars(String text) {
    StringBuilder sb = new StringBuilder();
    for (char c : text.toCharArray()) {
        switch (c) {
            case '\\' -> sb.append("\\\\");
            case '\n' -> sb.append("\\n");
            case '\t' -> sb.append("\\t");
            case '\'' -> sb.append("\\'");
            case '\"' -> sb.append("\\\"");
            default -> sb.append(c);
        }
    }
    return sb.toString();
}
Ответ принят как подходящий

Вот один из способов использования потоков.

String text = "He\f\bllo\nWor\rld!";
text = translate(text);

отпечатки

He\f\bllo\nWor\rld!
  • это разбивает строку, а затем заменяет правильный управляющий символ его экранированной внешней частью.
private static Map<Character, String> map = Map.of('\t', "\\t", '\b', "\\b", '\n',
        "\\n", '\f', "\\f", '\\', "\\\'", '"', "\\\"", '\r', "\\r");
public static String translate(String text) {
    return text.chars()
            .mapToObj(ch -> map.getOrDefault((char)ch, Character.toString(ch)))
            .collect(Collectors.joining());    
}

Другие вопросы по теме