Есть ли эквивалент System.lineSeparator () только для возврата каретки? - PullRequest
1 голос
/ 03 августа 2020

Доступен ли стандартный библиотечный метод, который будет выводить \r там, где необходимо, на Windows и ничего для Unix? (т.е. эквивалент System.lineSeparator(), за исключением того, что символ новой строки не выводится вообще)

  • У меня есть несколько модульных тестов, которые проверяют соответствие строк, выводимых в регистратор ожидаемые значения (проверено с помощью заглушки).

  • Они не работают при запуске на Windows, так как строки содержат возврат каретки - т.е. он будет выводить Foo::Bar на Unix или Foo\r::Bar на Windows. Это первый раз, когда я вижу, что \r генерируется сам по себе.

Это, очевидно, легко сделать самостоятельно, но хочу, чтобы код был таким же очевидным, как возможно для будущих разработчиков, поэтому стараются избегать повторной реализации, если она не нужна. Не ищу сторонних библиотек, которые это делают, просто если это что-то покрывается Стандартными Java библиотеками.

Ответы [ 2 ]

4 голосов
/ 03 августа 2020

Если тесты не работают на windows, это означает, что у вас есть код, который предполагает разделителем строк \n. Похоже, что где-то в вашем коде (либо в коде приложения, либо в тестовом коде) у вас есть что-то вроде:

String removeLineBreaks(String str) {
    return str.replace("\n", "");
}

, и это, очевидно, ошибка: на Windows возврат каретки останется нетронутым .

Вы должны попытаться найти ошибочный код, зависящий от платформы. Например, указанное выше следует изменить на:

String removeLineBreaks(String str) {
    // "\\R" works in Java 8+, use "\r?\n" in older versions. Thank you Joop for this!
    return str.replaceAll("\\R", "");
}
3 голосов
/ 03 августа 2020

Что ж, вы могли бы использовать:

System.lineSeparator().replaceAll("\n$", "")

Это удалит последнюю строку новой строки (требуется как для Windows, так и Linux), оставив за собой возврат каретки \r в случае Windows только.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...