Ecco cosa mi è venuto in mente. Ci sono diversi modi per farlo e dipendono dagli strumenti che usi.
Utilizzando StringUtils
e ArrayUtils
da Common Lang:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = StringUtils.join(ArrayUtils.toObject(arr), " - ");
Non si può semplicemente utilizzare StringUtils.join(arr, " - ");
perché StringUtils
non ha quel versione di overload del metodo. Tuttavia, ha il metodo StringUtils.join(int[], char)
.
Funziona con qualsiasi versione Java, da 1.2.
Utilizzo di Java 8 flussi:
qualcosa di simile:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = Arrays.stream(arr)
.mapToObj(String::valueOf)
.collect(Collectors.joining(" - "));
In realtà, ci sono molte variazioni più adeguati per svolgere il risultato usando flussi.
Il metodo Java 8 String.join()
funziona solo con stringhe, quindi per utilizzarlo è necessario convertire lo int[]
in String[]
.
String[] sarr = Arrays.stream(arr).mapToObj(String::valueOf).toArray(String[]::new);
String result = String.join(" - ", sarr);
Se bloccato utilizzando Java 7 o versioni precedenti con biblioteche, si potrebbe scrivere il proprio metodo di utilità:
public static String myJoin(int[] arr, String separator) {
if (null == arr || 0 == arr.length) return "";
StringBuilder sb = new StringBuilder(256);
sb.append(arr[0]);
//if (arr.length == 1) return sb.toString();
for (int i = 1; i < arr.length; i++) sb.append(separator).append(arr[i]);
return sb.toString();
}
di quanto si può fare:
int[] arr = new int[] {1, 2, 3, 4, 5, 6, 7};
String result = myJoin(arr, " - ");
È possibile '.collect (Collectors.joining (", "))' invece della matrice di stringhe temporanee. – shmosel
Bella panoramica! Per la versione java 1.7: tecnicamente non avrai bisogno del controllo arr.length == 1 prima del ciclo, ma funziona perfettamente. – n247s
@shmosel, no. 'Arrays.stream (arr)' produce un 'IntStream' e in esso non esiste alcun metodo' collect() '. – spirit