Я хочу многострочные строки в java, поэтому я ищу простой препроцессор для преобразования многострочных линий C-стиля в отдельные строки с буквальным «\ n».Какой самый яркий способ заменить обратную косую черту с n?
До:
System.out.println("convert trailing backslashes\
this is on another line\
\
\
above are two blank lines\
But don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");
После:
System.out.println("convert trailing backslashes\nthis is on another line\n\n\nabove are two blank lines\nBut don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");
Я думал sed
бы сделать это хорошо, но СЭД является построчным, поэтому замена «\» и символ новой строки, которая следует за ней (эффективно соединяющий две линии) не очень естественно в sed. Я приспособил sredden79's oneliner к следующему - он работает, это умное, но это не ясно:
sed ':a { $!N; s/\\\n/\\n/; ta }'
Заменитель имеет escaped literal backslash
, newline
с escaped literal backslash
, n
. :a
- это метка, а ta
- метка goto, если замена найдена совпадением; $
означает последнюю строку, а $!
- противоположность (т. Е. Все строки, кроме последней). N
означает добавить следующую строку в шаблоне пространства (таким образом делая \n
характер видимым.)
EDIT здесь изменение, чтобы компилятор номеров строк ошибок и т.д. точно: она превращает каждую расширенную линию в "..."+\n
(и обрабатывает первые и последние строки Строка корректно):
sed ':a { $!N; s/\\\n/\\n"+\n"/; ta }'
дает:
System.out.println("convert trailing backslashes\n"+
"this is on another line\n"+
"\n"+
"\n"+
"above are two blank lines\n"+
"But don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");
EDIT На самом деле было бы лучше иметь многострочный стиль Perl/Python, где он начинается и заканчивается специальным кодом в одной строке («,» для python, я думаю).
Есть ли более простой, более чистый, понятный способ (возможно, не использование sed)?
Если вы сделаете это, вы будете убивать поддержку своих инструментов. Внезапно никакая среда IDE не будет правильно подсвечивать синтаксис, отладчики будут показывать разные номера строк, чем ваш (исходный) исходный файл ... Помните, что компилятор (во время компиляции) объединяет литеральные строки, объединенные с '+', поэтому просто закрывая строка, написание '+' и открытие ее на следующей строке устраняет препроцессор и сохраняет поддержку инструмента. FWIW. –