package com.akjava.lib.common.functions; import java.util.ArrayList; import java.util.List; import com.akjava.lib.common.utils.TemplateUtils; import com.google.common.base.Function; import com.google.common.base.Joiner; public class StringFunctions { public static FirstLineOnly getFirstLineOnly(){ return FirstLineOnly.INSTANCE; } public enum FirstLineOnly implements Function<String,String>{ INSTANCE ; @Override public String apply(String input) { int index=input.indexOf("\n"); if(index==-1){ return input; }else{ return input.substring(0,index); } } } /** * * * for example * RowListStringJoinFunction(":") * [a1,b1] and [a2,b2] [a1:a2,b1:b2] * * @author aki * */ public static class RowListStringJoinFunction implements Function<List<List<String>>,List<String>>{ private String joint; public RowListStringJoinFunction(String joint){ this.joint=joint; } @Override public List<String> apply(List<List<String>> value) { List<String> result=new ArrayList<String>(); if(value.size()==0){ return result; } List<String> first=value.get(0); int rowCount=first.size(); if(rowCount==0){ return result; } Joiner joiner=Joiner.on(joint); for(int i=0;i<rowCount;i++){ List<String> vs=new ArrayList<String>(); for(int j=0;j<value.size();j++){ vs.add(value.get(j).get(i)); } result.add(joiner.join(vs)); } return result; } } public static class StringToPreFixAndSuffix implements Function<String,String>{ private String prefix; private String suffix; public StringToPreFixAndSuffix(String prefix,String suffix){ this.prefix=prefix; this.suffix=suffix; } @Override public String apply(String value) { return prefix+value+suffix; } } public static class StringToPreFixAndSuffixWithLineNumber implements Function<String,String>{ private String prefix; private String suffix; private int number; public StringToPreFixAndSuffixWithLineNumber(int start,String prefix,String suffix){ this.prefix=prefix; this.suffix=suffix; this.number=start-1; } @Override public String apply(String value) { number++; return TemplateUtils.createText(prefix,""+(number))+value+TemplateUtils.createText(suffix,""+(number)); } } }