Suppose I have an array of int, float, string etc. Is there any utility API (e.g. Commons, Guava) that will give me a comma separated string?
Like so,
int[] a = {1,2,3,4,5}.
String s = magicAPI.getCSV(a); // s == "1,2,3,4,5";
I've used OpenCSV in the past.
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);
However, for such a trivial example you might want to just use the a StringBuilder
and a for
loop
For this simple use case, you can simply join the strings with comma. If you use Java 8:
String csv = String.join(",", yourArray);
otherwise commons-lang has a join()
method:
String csv = org.apache.commons.lang3.StringUtils.join(yourArray, ",");
You mention Google Guava, which has the Joiner
utility for this:
String s = Joiner.on(",").join(a);
After digging more, I found http://static.springsource.org/spring/docs/1.1.5/api/org/springframework/util/StringUtils.html StringUtils API in Spring that can do it. Since , I'm already using Spring, I guess I will stick with it.
Commons Apache CSV appears to consolidate 3 other CSV libraries, although I can't find a release post-2007.
A quick look suggests OpenCSV will do what you want via a 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("#");
I have created a new method to do thisinstead of going for 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
If you convert your array into an Eclipse Collections primitive container, you can use one of the makeString()
methods. If you don't pass in separator parameter, it defaults to ", " (comma and space).
int[] array = {1,2,3,4,5};
IntList intList = IntLists.mutable.with(array);
String s1 = intList.makeString(",");
System.out.println(s1); // "1,2,3,4,5"
String s2 = intList.makeString();
System.out.println(s2); // "1, 2, 3, 4, 5"
Note: I am a committer for Eclipse Collections
来源:https://stackoverflow.com/questions/11545991/java-api-to-convert-array-to-csv