2012-07-18 34 views
7

Giả sử tôi có một mảng int, float, string, v.v. Có bất kỳ API tiện ích nào (ví dụ: Commons, Guava) sẽ cho tôi chuỗi được phân cách bằng dấu phẩy không?API Java để chuyển đổi mảng thành CSV

Giống như vậy,

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 'Mảng # toString' cũng chèn dấu cách sau mỗi dấu phẩy, mà bạn không thể xóa dễ dàng bằng regex vì nó có thể là một phần của một Chuỗi (trong trường hợp của một 'String []'). – assylias

+0

@assylias Mặc dù trong trường hợp đó bạn có thể cần phải xử lý trường hợp dấu phân cách là một phần của chuỗi tổng quát hơn. (Bằng cách sử dụng một thư viện CSV đầy đủ chẳng hạn như – millimoose

Trả lời

2

Tôi đã sử dụng OpenCSV trong quá khứ.

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

Tuy nhiên, đối với một ví dụ nhỏ như vậy bạn có thể muốn chỉ cần sử dụng một StringBuilderfor loop

+1

Không phải phương thức writeNext() KHÔNG yêu cầu bạn tự chèn dấu phẩy? Nếu không thì điểm là gì? –

+0

Rất tiếc ... Bạn đã đúng. Đã sửa! – munyengm

+0

Có phiên bản vectơ nào không? –

1

Commons Apache CSV dường như củng cố 3 thư viện CSV khác, mặc dù tôi không thể tìm thấy một thông cáo sau năm 2007.

Giao diện nhanh chóng cho thấy OpenCSV sẽ thực hiện những gì bạn muốn qua 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

Đối với trường hợp sử dụng đơn giản này, bạn chỉ có thể tham gia chuỗi với dấu phẩy. Nếu bạn sử dụng Java 8:

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

khác commons-lang có một phương pháp join():

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

Nếu bạn chuyển đổi mảng của mình thành vùng chứa Eclipse Collections (trước đây là GS Collections), bạn có thể sử dụng một trong các phương pháp makeString(). Nếu bạn không truyền tham số dấu phân cách, tham số mặc định là "," (dấu phẩy và dấu cách).

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" 

Lưu ý: Tôi là một người có duyên cho Eclipse Collections

0

Tôi đã tạo ra một phương pháp mới để làm thisinstead đi cho 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 
Các vấn đề liên quan