Я хочу код Java для преобразования массива строк в строку.
array.toString()
? Более конкретно.
Я хочу код Java для преобразования массива строк в строку.
array.toString()
? Более конкретно.
Ответы:
Если вы просто хотите получить дамп массива в стиле отладки:
String str = Arrays.toString(arr);
или, для большего контроля (до Java 8):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8 и выше):
String str = String.join(",", arr);
И если вы идете под углом Android:
String str = TextUtils.join(",", arr);
Вы можете изменить вышеупомянутое в зависимости от того, какие символы, если таковые имеются, вы хотите между строками.
Вы можете увидеть код, почти идентичный коду до Java 8, но использование StringBuffer
- StringBuilder
это более новый класс, который не является поточно-ориентированным, но, следовательно, имеет лучшую производительность в одном потоке, потому что устраняет ненужную синхронизацию. Короче говоря, лучше использовать StringBuilder
в 99% случаев - по функциональности они идентичны.
НЕ используйте строку и просто добавьте к ней + +, как показано здесь. Это отправляет GC через крышу, потому что вы создаете и выбрасываете столько строковых объектов, сколько у вас есть элементов в вашем массиве. Для небольших массивов вы можете не заметить разницу, но для больших массивов она может быть на несколько порядков медленнее.
Arrays.toString(yourArray);
но я думаю, что вы использовалиyourArray.toString();
Используйте Apache Commons StringUtils.join()
. Он принимает массив в качестве параметра (а также имеет перегрузки для Iterable
и Iterator
параметров) и вызывает toString()
каждый элемент (если он не нулевой), чтобы получить строковое представление каждого элемента. Каждое строковое представление элементов затем объединяется в одну строку с разделителем между ними, если он указан:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
Производит:
a-b-1
Мне нравится использовать Google Guava Joiner для этого, например:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
будет производить ту же строку, что и:
new String("Harry, Ron, Hermione");
ETA: Java 8 теперь имеет аналогичную поддержку:
String.join(", ", "Harry", "Ron", "Hermione");
Не вижу поддержки для пропуска нулевых значений, но это легко обойти.
null
был бы «тот, чье имя не должно быть упомянуто» :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Вы можете сделать это, учитывая массив a
примитивного типа:
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();
Попробуйте метод Arrays.deepToString .
Возвращает строковое представление "глубокого содержимого" указанного массива. Если массив содержит другие массивы в качестве элементов, строковое представление содержит их содержимое и так далее. Этот метод предназначен для преобразования многомерных массивов в строки
Попробуйте перегруженные методы Arrays.toString .
Или, попробуйте это ниже общей реализации:
public static void main(String... args) throws Exception {
String[] array = {"ABC", "XYZ", "PQR"};
System.out.println(new Test().join(array, ", "));
}
public <T> String join(T[] array, String cement) {
StringBuilder builder = new StringBuilder();
if(array == null || array.length == 0) {
return null;
}
for (T t : array) {
builder.append(t).append(cement);
}
builder.delete(builder.length() - cement.length(), builder.length());
return builder.toString();
}
открытый класс ArrayToString {
public static void main (аргументы String []) { String [] strArray = new String [] {"Java", "PHP", ".NET", "PERL", "C", "COBOL"};String newString = Arrays.toString(strArray); newString = newString.substring(1, newString.length()-1); System.out.println("New New String: " + newString); } }
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';
String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s
result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s
result = String.join("", strings);
//Java 8 .join: 3ms
Public String join(String delimiter, String[] s)
{
int ls = s.length;
switch (ls)
{
case 0: return "";
case 1: return s[0];
case 2: return s[0].concat(delimiter).concat(s[1]);
default:
int l1 = ls / 2;
String[] s1 = Arrays.copyOfRange(s, 0, l1);
String[] s2 = Arrays.copyOfRange(s, l1, ls);
return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
}
}
result = join("", strings);
// Divide&Conquer join: 7ms
Если у вас нет выбора, кроме как использовать Java 6 или 7, тогда вы должны использовать Divide & Conquer join.
Вы хотите код, который производит строку из arrayList,
Iterate through all elements in list and add it to your String result
Вы можете сделать это двумя способами: используя String как результат или StringBuffer / StringBuilder.
Пример:
String result = "";
for (String s : list) {
result += s;
}
... но это не очень хорошая практика по причине производительности. Лучше использовать StringBuffer (безопасный для потоков) или StringBuilder, которые больше подходят для добавления строк
Используйте метод присоединения библиотеки StringUtils Apache Commons .
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
Если вы знаете, сколько элементов в массиве, это можно сделать простым способом:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];