2012-07-18 9 views
7

Supponiamo di avere una matrice di int, float, stringhe ecc. Esiste qualche API di utilità (ad esempio Commons, Guava) che mi fornirà una stringa separata da virgole?API Java per convertire la matrice in CSV

Come così,

int[] a = {1,2,3,4,5}. 
String s = magicAPI.getCSV(a); // s == "1,2,3,4,5"; 
+0

Arrays.toString (a) .Substring (1) .replaceAll ("] $", "") //: P – rascio

+0

@rascio 'Arrays # toString' inserisce anche spazi dopo ogni virgola, che non è possibile rimuovere facilmente con un'espressione regolare poichè potrebbe essere parte di una stringa (in il caso di un 'String []'). – assylias

+0

@assylias Anche se in questo caso è necessario gestire il caso in cui il delimitatore fa parte della stringa più in generale. (Usando una libreria CSV completa per esempio: – millimoose

risposta

2

Ho usato OpenCSV in passato.

StringWriter stringWriter = new StringWriter(); 
int[] a = {1,2,3,4,5}; 
String[] b = new String[a.length]; 
for (int i = 0; i < a.length; i++) { 
    b[i] = a[i]; 
} 
CSVWriter csvWriter = new CSVWriter(stringWriter, ","); 
csvWriter.writeNext(b); 

Tuttavia, per un esempio, così banale si potrebbe desiderare di utilizzare solo l'un StringBuilder e un for ciclo

+1

Non richiede il metodo writeNext() inserire le virgole te stesso? Altrimenti qual è il punto? –

+0

Oops ... Hai ragione. Corretto! – munyengm

+0

Esiste una versione vettoriale di questo? –

1

Commons Apache CSV sembra consolidare 3 altre biblioteche CSV, anche se non riesco a trovare un rilascio post-2007.

Un rapido sguardo suggerisce OpenCSV farà quello che vuoi tramite un CSVWriter.

CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t'); 
// feed in your array (or convert your data to an array) 
String[] entries = "first#second#third".split("#"); 
21

Per questo semplice caso d'uso, si può semplicemente unire le corde con una virgola. Se si utilizza Java 8:

String csv = String.join(",", yourArray); 

altrimenti commons-lang ha un metodo join():

String csv = org.apache.commons.lang3.StringUtils.join(yourArray, ","); 
1

Se si converte la matrice in un contenitore Eclipse Collections (precedentemente GS Collections), è possibile utilizzare uno dei metodi makeString(). Se non si passa al parametro separatore, viene impostato automaticamente su "," (virgola e spazio).

MutableList<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5); 
String s1 = integers.makeString(","); // "1,2,3,4,5" 
String s2 = integers.makeString(); // "1, 2, 3, 4, 5" 

Nota: Sono un committer per Eclipse Collezioni

0

ho creato un nuovo metodo per fare thisinstead di andare per openCSV

public String convertArrayToCsv(String[] IncomingArray) 
{ 
    StringBuilder sb=new StringBuilder(); 
    for (int i=0;i<IncomingArray.length;i++) 
    { 
     sb=sb.append(IncomingArray[i]); 
     if(i != IncomingArray.length-1) 
     { 
      sb.append(","); 
     } 
    } 
    return sb.toString(); 
}//end of convertArrayToCsv method