package com.akjava.lib.common.csv;
import java.util.List;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.FluentIterable;
public class CSVLibUtils {
private CSVLibUtils(){}
public static class CSVJoiner implements Function<List<String>,String>{
private Joiner joiner;
private char separator;
private char quotechar;
public CSVJoiner(char separator,char quotechar) {
super();
this.separator=separator;
this.quotechar=quotechar;
joiner=Joiner.on(separator);
}
@Override
public String apply(List<String> input) {
List<String> converted=FluentIterable.from(input).transform(new ToCSVString(separator,quotechar,String.valueOf(quotechar)+String.valueOf(quotechar))).toList();
return joiner.join(converted);
}
}
public static class ToCSVString implements Function<String,String>{
private char separator;
private char quote;
String quoteEscaped;
public ToCSVString(char separator,char quote,String quoteEscaped) {
super();
this.separator = separator;
this.quote=quote;
this.quoteEscaped=quoteEscaped;
}
@Override
public String apply(String input) {
return toCsvString(input,separator,quote,quoteEscaped);
}
}
public static class ListToArray implements Function<List<String>,String[]>{
@Override
public String[] apply(List<String> input) {
return input.toArray(new String[0]);
}
}
//quote is fixed
public static String toCsvString(String text,char separator,char quote,String quoteEscaped){
boolean containLineSeparator=text.indexOf("\n")!=-1 && text.indexOf("\r")!=-1;
boolean containSeparator=text.indexOf(separator)!=-1;
if(containLineSeparator || containSeparator || text.startsWith(""+quote)){
text=text.replace(""+quote, quoteEscaped);//escaped
return quote+text+quote;
}else{//
return text;
}
}
}