Разделение длинного текста на несколько строк кода, лучший способ сделать это?

1

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

private void welcomeMessage() {
    System.out.println("Welcome to the game. This message should learn me how to create a long messages like this in a read-able fashion. Imagine there is a limit of 80 characters per line for a programmer to see. How to fix this efficiently? This is one large line in my IDEA. ");
}

Эта строка слишком длинна, чтобы она составляла 80 символов в строке кода, как вы можете видеть на полосе прокрутки. Я ранее научился просто делать что-то вроде этого:

private void welcomeMessage() {
    System.out.println("Welcome to the game. This message should learn me" +
            " how to create a long messages like this in a read-able " +
            "fashion. Imagine there is a limit of 80 characters per line for" +
            " a programmer to see. How to fix this efficiently? This is one " +
            "large line in my IDEA. ");
}

Однако я считаю это решение уродливым, это создает зависимость, которая так раздражает. Если я добавлю "Welcome to the game. This message should learn me" просто одно слово, которое я должен изменить, все остальные строки, поэтому все строки после строки зависят от него.

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

  1. Содержит ли компилятор все строки напрямую, поскольку они сами не зависят от других переменных или это происходит во время выполнения? (Я боюсь, что он будет называть операторную функцию конкатенации ("+") 4 раза)
  2. Будет ли StringBuffer с.append() более эффективным в этом примере, потому что он не создает 5 строк, а добавляет его к объекту StringBuilder?

Представьте, что это была настоящая игра, вы бы просто сделали текстовый файл txt и импортировали его с помощью StringBuffer и т.д., Чтобы отобразить его на экране? Или как еще вы могли бы отображать более длинные текстовые сообщения?

  • 1
    Конкатенация строк на самом деле превращается в StringBuilder.append() за кулисами. Я бы лично использовал StringBuilder и добавлял каждую строку, чтобы она выглядела более чистой (не забывая ставить пробел в конце начала каждой). Или вы можете использовать конфигурации Apache Commons и прочитать значение из файла .properties .
  • 0
    В какой момент это «требование» вступает в игру? Если только в самом конце задания, напишите свой код и настройте форматирование только по завершении. Если нет, то как часто вы меняете строки - достаточно часто , чтобы сделать его практической проблемой?
Показать ещё 5 комментариев
Теги:
string
performance
text

1 ответ

2
Лучший ответ

Содержит ли компилятор все строки напрямую, поскольку они сами не зависят от других переменных или это происходит во время выполнения? (Я боюсь, что он будет называть операторную функцию конкатенации ("+") 4 раза)

Компилятор объединяет строки. Накладные расходы не работают.

Будет ли StringBuffer с.append() более эффективным в этом примере, потому что он не создает 5 строк, а добавляет его к объекту StringBuilder?

Нет.


Демо-версия:

class Test {
    public static String test = "a" + "b" + "c";
}

Команда

javac Test.java && javap -c -v Test

дает следующий результат

[...]
Constant pool:
   #1 = Methodref          #5.#15         //  java/lang/Object."<init>":()V
   #2 = String             #16            //  abc
   #3 = Fieldref           #4.#17         //  Test.test:Ljava/lang/String;
[...]

Code:
  stack=1, locals=0, args_size=0
     0: ldc           #2                  // String abc
     2: putstatic     #3                  // Field test:Ljava/lang/String;
     5: return     

[...]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню