Как автоматически разделить длинные строки в IntelliJ IDEA?

#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:

Та же версия — Community Edition. Вот соответствующий раздел

Комментарии:

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 внутри, для вас.