Я хочу, щоб код Java перетворив масив рядків у рядок.
array.toString()
? Будьте більш конкретні.
Я хочу, щоб код Java перетворив масив рядків у рядок.
array.toString()
? Будьте більш конкретні.
Відповіді:
Якщо ви просто хочете скинути масив "debug style":
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();
1.8
ви можете також використовувати String::join
замість for-петлі. String.join("", arr);
Використовуйте спільноти Apache StringUtils.join()
. Він приймає масив як параметр (а також має перевантаження для Iterable
та Iterator
параметрів) та викликає toString()
кожен елемент (якщо він не є нульовим), щоб отримати представлення рядків кожного елемента. Кожне представлення рядка елементів об'єднується в одну рядок з роздільником між ними, якщо вказано таке:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
Виробляє:
a-b-1
Мені подобається використовувати для цього Guava Joiner від Google , наприклад:
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 array[]={"one","two"};
String s="";
for(int i=0;i<array.length;i++)
{
s=s+array[i];
}
System.out.print(s);
Якщо ви знаєте, скільки елементів має масив, це простий спосіб:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];