Фиксированный массив? / StringBuilder? / String?Какой лучший способ создать строку, если 84 строки должны быть добавлены - PullRequest
0 голосов
/ 14 мая 2018

Я заранее знаю, что будет 84 строки, которые будут добавлены через запятую, чтобы потом создать одну строку,

Какой способ лучше использовать фиксированный Array, Strings или String Builder?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вы также можете использовать StringJoiner для построения строки.Это похоже на использование StringBuilder, но вам не нужно беспокоиться о запятых (и вы даже можете добавить и добавить значение, если хотите).

Это в основном полезно при сборкерезультат по частям, или когда вы можете опустить некоторые элементы.В противном случае он не дает никаких преимуществ по сравнению с Collectors.joining() или String.join() (который в любом случае использует StringJoiner).

0 голосов
/ 14 мая 2018

Если под «лучшим» вы подразумеваете «наиболее эффективную память и / или время выполнения», то вам, вероятно, лучше всего с StringBuilder, который вы предварительно выделяете.(Посмотрев на реализацию String.join в JDK, он использует StringJoiner, который использует StringBuilder с начальной емкостью по умолчанию [16 символов] без попытки избежать перераспределения и копирования.)

Вы суммируете длины своих 84 строк, добавляете количество запятых, создаете StringBuilder с этой длиной, добавляете их все и вызываете toString на нем.Например:

int length = 0;
for (int i = 0; i < strings.length; ++i) {
    length += strings[i].length();
}
length += strings.length - 1; // For the commas
StringBuilder sb = new StringBuilder(length);
sb.append(strings[0]);
for (int i = 1; i < strings.length; ++i) {
    sb.append(',');
    sb.append(strings[i]);
}
String result = sb.toString();
0 голосов
/ 14 мая 2018

Есть много способов сделать это.

Мой предпочтительный способ сделать это (который может или не может быть лучшим) будет преобразовать мои 84 строки в поток (с Arrays.stream()или list.stream(), в зависимости от того, как на самом деле хранятся строки), а затем выполните Collectors.joining(",").

То есть, если у вас уже есть массив, String.join(",", array) выполнит трюк какхорошо, как отмечено в другом ответе.

...