#java #string #intellij-idea
#java #строка #intellij-idea
Вопрос:
Я пишу тест с очень длинными строками, и мне нужно разделить эти строки:
private static final String TOO_LONG_JSON = "{field1:field1, field2:field2 ... fieldN:fieldN}";
таким образом, они станут:
private static final String TOO_LONG_JSON = "{field1:field1, field2:field2"
"{field3:field3, field4:field4,field6:field6, field7:field7}"
"{field8:field8, field9:field9,field10:field10, field11:field11}"
" ... fieldN:fieldN}";
Можно ли настроить IntelliJ IDEA для автоматического разделения этих длинных строк?
Комментарии:
1. Вы меняете содержимое строки?
2. Нет, просто разделите его с
помощью sign. Например, можно настроить Intellin для переноса строки кода длиной более 80 символов, мне нужно что-то подобное со слишком длинными строками.
3. Посмотрите на ярлыки форматирования кода.
4. Я смотрю, но что именно я должен увидеть? 🙂
5. Я согласен с комментариями ниже, что последняя версия IntelliJ не разбивает строку с форматированием кода. Однако вы можете переместить курсор внутрь строки и нажать Enter, чтобы разделить строку вручную.
Ответ №1:
Вы можете использовать автоматическое форматирование, запустив Reformat code
функцию (CTRL ALTL) после нескольких изменений в настройках стиля кода.
(альтернативно Reformat code
, ⌥ ⌘L на macOS),
- Нажмите CTRL ALTS, чтобы открыть
Settings
окно (илиPreferences
, ⌘ , на macOS) - Перейдите в
Code Style
меню и выберитеJava
подменю - Перейдите на
Wrapping and Braces
вкладку - Обязательно снимите флажок
Line Breaks
option и установите флажокEnsure right margin is not exceeded
option - Нажмите
OK
, чтобы принять внесенные изменения
Теперь при использовании автоматического форматирования (CTRL ALTL / macOS ⌥ ⌘L) длинные строки, превышающие лимит символов строки, будут автоматически разрезаны на несколько строк.
Комментарии:
1. @GiliGaribi Какую версию IntelliJ IDEA вы используете? Я только что протестировал его на новейшей версии (в настоящее время 2017.3.5), и, конечно, это работает. Параметры «Разрывы строк» и «Убедитесь, что правое поле не превышено» теперь находятся на вкладке «Перенос и фигурные скобки», но они по-прежнему работают по назначению.
2. Это усугубило проблему для меня. Он по-прежнему не разбивает длинные строки, но теперь он также портит другой код. Использование 2017.3.5
3. Выделите строку со строкой, если вы не хотите переформатировать весь файл
4. Я не могу найти это в версии 2020.2.1
5. 2022.2 Ultimate — этот ответ просто не работает.
Ответ №2:
Комментарии:
1. Кстати, это работает для длинных строк в целом, но не для одной строки с длинной строкой
Ответ №3:
По крайней мере, для меня параметры форматирования кода по-прежнему не делают этого в версии 2020.2.3 Ultimate. Кажется, что строка разбивается только на знаки препинания — "fooofoooo.ffoooo"
разбивается на "fooofoooo" "ffoooo"
, но длинная строка с буквами в ней не разделяется.
Единственное, что я видел работающим последовательно, это поместить курсор в строку и нажать enter. Это вряд ли «автоматически», но пока лучший ответ.
Ответ №4:
ОБНОВЛЕНИЕ 2022 ГОДА До сих пор нет ответа на вопрос, заданный OP — настройте IntelliJ на «автоматическое разделение этих длинных строк». Самый популярный ответ не работает.
Есть только один способ (ручной) решить эту проблему, если кто-то не напишет плагин. Этот метод гарантированно работает независимо от любых других настроек и обеспечивает 100%-ный контроль форматирования любого сегмента кода, а не только тех, которые содержат длинные строки строк.
Перейдите Settings Editor | Code Style | Formatter
и включите маркеры включения / выключения форматирования. Отформатируйте фрагмент кода любым удобным для вас способом и окружите его фразами off / on в комментариях к коду.
Мой примерный сегмент кода:
System.out.println("This is a long line of text that includes " variables() " and " some.otherStuff().toString() ". But don't count on " this.IDE().toName() " to format it in " anIntelligent() " way. " this.IDE().toName() " should add a " plusSign.Option() " for long strings like this.");
РЕЗУЛЬТАТ 1 С настройками, как описано в ответе @mkierc, с жестким переносом на 80 для каждой операции:
System.out.println(
"This is a long line of text that includes " variables() " in "
"it and " some.otherStuff()
.toString() ". But don't count on " this.IDE()
.toName() " to format it in " anIntelligent() " way. " this.IDE()
.toName() " should add a " plusSign.Option() " for long strings like this.");
Я не знаю, как это может быть хуже. Жесткий перенос не был выполнен после второй строки, а конечная точка с запятой находится в столбце 300! Честно говоря, я не могу представить, какой алгоритм привел к этому беспорядку. Мой сын в 10 лет мог бы сделать лучше…
РЕЗУЛЬТАТ 2 отформатирован вручную, поле 80 и маркеры включения / выключения форматирования:
//@formatter:off
System.out.println("This is a long line of text that includes "
variables() " in it and " some.otherStuff().toString()
". But don't count on " this.IDE().toName()
" to format it in " anIntelligent() " way. "
this.IDE().toName() " should add a " plusSign.Option()
" for long strings like this.");
//@formatter:on
Возможно, результат 1 можно улучшить с помощью других настроек. Я попробовал несколько, казалось бы, подходящих вариантов и их комбинаций. Ни один из них существенно не изменил результаты.
Ответ №5:
Мне пришлось вставить длинную строку SQL для собственного запроса в моем приложении. Я думаю, что реальное решение — поместить курсор внутрь «» меток этой строки кода, введенной вручную: » »
Когда вы вставляете ДЛИННУЮ СТРОКУ текста внутри кавычек, IntelliJ будет форматировать каждую строку кода также с t и n внутри, для вас.