2012-07-18 49 views
7

Supongamos que tengo una matriz de int, float, string, etc. ¿Hay alguna API de utilidad (por ejemplo, Commons, Guava) que me dé una cadena separada por comas?Java API para convertir Array en CSV

Como tal,

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' también inserta espacios después de cada coma, que no se puede eliminar fácilmente con una expresión regular, ya que podría ser parte de una Cadena (en el caso de un 'String []'). – assylias

+0

@assylias Aunque en ese caso probablemente necesite manejar el caso del delimitador siendo parte de la cadena de manera más general. (Al usar una biblioteca CSV completa, por ejemplo. – millimoose

Respuesta

2

He usado OpenCSV en el pasado.

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); 

Sin embargo, para un ejemplo tan trivial es posible que desee utilizar sólo el StringBuilder un bucle y una for

+1

¿No es necesario el método writeNext()? para insertar comas tú mismo? De lo contrario, ¿cuál es el punto? –

+0

Vaya ... Tienes razón. Corregido! – munyengm

+0

¿Hay una versión vectorizada de esto? –

1

Commons Apache CSV parece consolidar otras 3 bibliotecas CSV, aunque no puedo encontrar una versión posterior a 2007.

Un vistazo rápido sugiere OpenCSV hará lo que quiera a través de 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

Para este caso de uso simple, sólo tiene que unirse a las cadenas con comas. Si utiliza Java 8:

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

lo contrario commons-lang tiene un método join():

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

Si convierte su matriz en un contenedor Eclipse Collections (anteriormente GS Collections), puede utilizar uno de los métodos makeString(). Si no pasa el parámetro separador, se establece de manera predeterminada en "," (coma y espacio).

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: Soy un confirmador de Eclipse Colecciones

0

He creado un nuevo método para hacer thisinstead de ir para 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