Java перенос строки кода

Как добавить перенос строки в Java

Перенос строки, он же перенос каретки это один или несколько спецсимволов, означающие окончание текущей строки символов и перевод картеки на новую строку. В зависимости от операционной системы используются разные спецсимволы. Например, в Windows используются спецсимволы CR + LF:

Спецсимолы Альт-код Управляющая последовательность Операционные системы
CR LF 13 10 \r \n DOS, OS/2, все версии Windows (в том числе и последние)
LF 10 \n Linux, macOS, Unix и прочие POSIX-совместимые системы
CR 13 \r Старые версии Mac OS (до версии 9)

Спецсимволу CR соответсвует альт-код 13, а спецсимволу LF альт-код 10. Кстати, CR означает carriage return (возврат каретки), а LF это line feed (перевод строки). Управляющая последовательность \r\n или \n как раз и обозначает перевод строки в Си подобных языках программирования.

Как сделать перенос строки

Допустим, у вас есть строка, содержимое которой выводится в консоль:

String oneLine = "Hello Java World!"; System.out.println(oneLine);

При выводе в консоль вы увидите те же слова, составляющие ровно одну строку, без переносов на новые строки. Как же нам добавить перенос строки в Java?

Для разных операционных систем переносом строки являются разные управляющие символы:
Для Windows это символы \r\n
Для Linux, macOS и прочих *nix систем это \n

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

Способ первый – захардкодить перенос строки

Допустим, ваша программа на Java запускается в Linux. Вы просто добавляете символы \n в то место в строке, в котором вам нужно сделать перевод на новую строку:

String multipleLines = "Hello\nJava\nWorld!"; System.out.println(multipleLines);

Теперь, при использовании переносов строки, вы, вместо одной строки в консоли увидите три строки – по каждой на символы \n

Но как же быть, если вы не хотите хардкодить символы переноса строки?

Способ второй – портабельный и правильный

Если вы не хотите писать символы \n каждый раз, когда хотите сделать перенос строки – вы можете воспользоваться стандартным методом System.lineSeparator() , который возвращает перенос строки для той операционной системы, в которой сейчас выполняется ваша программа. Это очень полезно, если программа исполняется и в Windows и в Linux окружении.

Читайте также:  Document

Просто используйте System.lineSeparator() в том месте, где вам нужно создать новую строку:

String multipleLines = "Hello" + System.lineSeparator() + "Java" + System.lineSeparator() + "World!"; System.out.println(multipleLines);

Итак, вы научились делать перевод строки в Java, используя два способа.

Источник

Java перенос строки кода

Тело класса, метода или конструктора относится к блочной конструкции.

Обратите внимание, что согласно Разделу 4.8.3.1, любой инициализатор массива также может рассматриваться как блочная конструкция.

Фигурные скобки используются в if, else, for, while и do-while, даже если тело выражения пустое или содержит лишь одну строку кода.

Фигурные скобки ставятся согласно стилю Кернигана и Ритчи («Египетские скобки») для непустых блоков и блочных конструкций (для наглядности мы решили добавить немного кода, демонстрирующего данные правила — примечание переводчика):

 // правильно for (true) < // some code >// неправильно while (true) < /* some code */ >// неправильно if (true) < /* some code */ >
  • Переход на новую строку делается после закрывающей скобки, только если эта скобка завершает выражение или тело метода, конструктора или не анонимный класс. Переход на новую строку не делается после скобки, если за ней следует else, catch или точка с запятой
 return () -> < while (condition()) < method(); >>; return new MyClass() < @Override public void method() < if (condition()) < try < something(); >catch (ProblemException e) < recover(); >> else if (otherCondition()) < somethingElse(); >else < lastThing(); >> >; 

Пустой блок или пустая блочная конструкция может следовать стилю K & R (как описано в Разделе 4.1.2). Также возможно, чтобы такой блок был закрыт сразу же после открытия, без символов или разрыва строки внутри <>. Это правило не относится к случаю, когда блок является частью многоблочного выражения, которое содержит if-else или try-catch-finally.

 // Приемлемо void doNothing() <> // Также приемлемо void doNothingElse() < >// Неприемлемо: нельзя использовать пустые блоки в многоблочном выражении try < doSomething(); >catch (Exception e) <> 

Каждый раз, когда открывается новый блок или блочная конструкция, смещение вправо увеличивается на два пробела (лучше на четыре — примечание переводчика). Когда блок заканчивается, начало следующей строки кода смещается на предыдущий уровень смещения. Уровень смещения применяется как к блоку, так и к комментариям в этом блоке (см. пример в Разделе 4.1.2).

Читайте также:  Scroll behavior css поддержка

Java-код имеет ограничение в 100 символов по ширине строки (из-за распространения широкоформатных мониторов, допустимой шириной является использование до 120 символов — примечание переводчика). Под «символом» понимается любой из элементов Unicode. За исключением случаев, описанных ниже, каждая строка с превышением ограничения по ширине, должна быть перенесена так, как это объяснено в Разделе 4.5.

  1. Строки, в которых соблюдение ограничения по ширине невозможно (например, длинная ссылка URL в Javadoc или длинная JSNI-ссылка на метод)
  2. Объявления package и import (см. Разделы 3.2 и 3.3)
  3. Строки с командами в комментариях, которые могут быть скопированы и вставлены для выполнения в терминале
  4. Очень длинные идентификаторы в тех редких случаях, когда они требуются, могут превышать ограничение по ширине

Когда код, который в другом случае мог бы быть расположен на одной строке, разделяется на несколько строк, это явление называется переносом строки.

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

Обычно перенос делается во избежание переполнения строки по ширине. Но даже если код остался бы в пределах разрешенной ширины, то и он, по решению автора, может быть перенесен на новую строку.

Выделение вспомогательного метода или локальной переменной может решить проблему переполнения строки по ширине без переноса кода

Первое указание по переносу строки гласит: предпочтительнее делать перенос на более высоком синтаксическом уровне. Также:

  • разделяющая точка «.»
  • двойное двоеточие ссылочного метода «::»
  • амперсанд в скобках дженерика
  • разделитель в catch-блоке catch (FooException | BarException e)

2. Когда строка переносится на операторе присваивания, перенос обычно делается после символа, но приемлемо и другое решение

Это также применимо к двоеточию для цикла for-each.

5. Строка никогда не переносится непосредственно у стрелки лямбда-выражения, кроме случаев, когда его тело состоит из одного выражения без фигурных скобок:

 MyLambda lambda = (String label, Long value, Object obj) -> < . >; Predicate predicate = str -> longExpressionInvolving(str); 

При переносе строки каждая следующая ее подстрока (каждое продолжение строки) смещается как минимум на 4 пробела относительно предыдущей.

Читайте также:  Get all input text javascript

Когда продолжений строки несколько, смещение может варьироваться в пределах 4 пробелов по желанию автора. По общему правилу, два продолжения строки могут иметь одинаковое смещение тогда и только тогда, когда они начинаются с синтаксически параллельных элементов.

В Разделе 4.6.3 даются указания по использованию различного количества пробелов для выравнивания элементов кода относительно предыдущих строк.

Одна пустая строка всегда ставится:

1. Между следующими друг за другом членами или инициализаторами класса: полями, конструкторами, методами, вложенными классами, статическими и динамическими блоками инициализации

  • исключение: пустая строка между двумя последовательными полями (без кода между ними) используется опционально. При необходимости пустые строки используются для логического группирования полей
  • исключение: пустые строки между константами класса enum (см. Раздел 4.8.1)

Пустая строка также может быть использована повсеместно для повышения читаемости кода, например, между выражениями для организации кода в логические подразделы. Пустая строка перед первым членом класса, или блоком инициализации, или после последнего члена, или блока инициализации класса не приветствуется, но и не возбраняется.

Несколько последовательных пустых строк делать разрешается, но это не необходимо и не приветствуется.

Помимо требований самого языка или прочих правил данного документа, а также не считая литералов и комментариев (в т.ч. Javadoc), одиночные пробелы из таблицы ASCII могут присутствовать только в следующих местах:

1. При разделении любого зарезервированного слова, такого как if, for или catch, и открывающей круглой скобки «(», которая следует за ним

2. При разделении любого зарезервированного слова, такого как else или catch, и закрывающей фигурной скобки «>», которая следует за ним

4. По обе стороны от любого бинарного или тернарного оператора

  • амперсанд внутри угловых скобок:
  • разделитель в блоке catch, содержащий несколько исключений: catch (FooException | BarException e)
  • двоеточие «:» в for-each
  • стрелка в лямбда-выражении: (String str) -> str.length()

Источник

Оцените статью