package com.akjava.gwt.lib.client; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.Scheduler.RepeatingCommand; /** * for large data? * @author aki * */ public class LineSplitter implements RepeatingCommand{ private List<String> lines=new ArrayList<String>(); private int consumeTime; private String text; private int cindex; private SplitterListener listener; public LineSplitter(String text,int consumeTime,SplitterListener listener){ this.text=text; this.consumeTime=consumeTime; this.listener=listener; } @Override public boolean execute() { int splitted=0; long s=System.currentTimeMillis(); while(System.currentTimeMillis()<s+consumeTime){ int find=text.indexOf("\n", cindex); if(find!=-1){ lines.add(text.substring(cindex,find)); cindex=find+1; }else{ lines.add(text.substring(cindex)); listener.onSuccess(lines); return false; } splitted++; } //LogUtils.log("parsed:"+index); return true; } public static interface SplitterListener { public void onSuccess(List<String> lines); } public static String[] splitLineAsArray(String text){ List<String> values=splitLines(text); return values.toArray(new String[values.size()]); } public static List<String> splitLines(String text){ text=text.replace("\r", ""); List<String> result=new ArrayList<String>(); int find=0; int cindex=0; while(find!=-1){ find=text.indexOf("\n", cindex); if(find!=-1){ result.add(text.substring(cindex,find)); cindex=find+1; }else{ result.add(text.substring(cindex)); } } return result; } }