Voglio il codice Java per convertire una matrice di stringhe in una stringa.
array.toString()
? Sii più preciso.
Voglio il codice Java per convertire una matrice di stringhe in una stringa.
array.toString()
? Sii più preciso.
Risposte:
Se vuoi solo un dump "debug-style" di un array:
String str = Arrays.toString(arr);
o, per un maggiore controllo (prima di Java 8):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8 e versioni successive):
String str = String.join(",", arr);
E se provieni dal punto di vista Android:
String str = TextUtils.join(",", arr);
Puoi modificare quanto sopra a seconda di quali caratteri vuoi tra le stringhe.
Potresti vedere un codice quasi identico al codice pre-Java 8 ma usando StringBuffer
- StringBuilder
è una classe più recente che non è thread-safe, ma quindi ha prestazioni migliori in un singolo thread perché elimina la sincronizzazione non necessaria. In breve, stai usando meglio StringBuilder
nel 99% dei casi - per quanto riguarda la funzionalità, i due sono identici.
NON usare una stringa e aggiungila semplicemente con + = come alcune delle risposte mostrano qui. Questo invia il GC attraverso il tetto perché stai creando e buttando via tutti gli oggetti stringa quanti sono gli elementi nel tuo array. Per array di piccole dimensioni potresti non notare davvero la differenza, ma per quelli di grandi dimensioni può essere più lento di ordini di grandezza.
Arrays.toString(yourArray);
ma immagino che tu abbia usatoyourArray.toString();
Usa i comuni di Apache StringUtils.join()
. Prende un array, come parametro (e ha anche sovraccarichi per Iterable
e Iterator
parametri) e chiama toString()
ciascun elemento (se non è nullo) per ottenere la rappresentazione di ogni stringa di elementi. Ogni rappresentazione di stringa di elementi viene quindi unita in una stringa con un separatore in mezzo se ne viene specificato uno:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
produce:
a-b-1
Mi piace usare Guava Joiner di Google per questo, ad esempio:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
produrrebbe la stessa stringa di:
new String("Harry, Ron, Hermione");
ETA: Java 8 ha un supporto simile ora:
String.join(", ", "Harry", "Ron", "Hermione");
Non riesco a vedere il supporto per saltare i valori null, ma questo è facilmente aggirabile.
null
sarebbe "colui il cui nome non deve essere menzionato" :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Potresti farlo, dato un array a
di tipo primitivo:
StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();
Prova il metodo Arrays.deepToString .
Restituisce una rappresentazione in formato stringa dei "contenuti profondi" dell'array specificato. Se l'array contiene altri array come elementi, la rappresentazione in formato stringa contiene il loro contenuto e così via. Questo metodo è progettato per convertire array multidimensionali in stringhe
Prova i metodi sovraccarichi Arrays.toString .
Altrimenti, prova questo sotto l'implementazione generica:
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 di classe pubblica {
public static void main (String [] args) { 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
Se non hai la scelta, ma per usare Java 6 o 7, dovresti usare il join Divide & Conquer.
Vuoi un codice che produca una stringa da arrayList,
Iterate through all elements in list and add it to your String result
puoi farlo in 2 modi: usando String come risultato o StringBuffer / StringBuilder.
Esempio:
String result = "";
for (String s : list) {
result += s;
}
... ma questa non è una buona pratica a causa del motivo delle prestazioni. Meglio usare StringBuffer (thread sicuri) o StringBuilder che sono più appropriati per aggiungere stringhe
Usa il metodo join della libreria StringUtils di 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);
Se sai quanti elementi ha l'array, un modo semplice è farlo:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];