|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。
在java。util中的java.io.StringTokenizer类能对单个字符串举行剖析,在jdk1.4中的split也能够对单个字符串举行剖析,但都不克不及对Reader流举行剖析,在多个字符剖析的时分也不克不及前往支解两个字符串的字符串,上面这个类就是为懂得决这个成绩而写的,还能够在筹办包含一些最基础的剖析范例,*和?
能够设置多个split举行剖析,在剖析的时分前往对应的支解字符串
程序能够间接运转
/**创立日期2005-4-4**变动所天生文件模板为*窗口>首选项>Java>代码天生>代码和正文*/packagecom.csii.template;
importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.io.StringReader;importjava.util.Iterator;
/***@authorwsl**变动所天生范例正文的模板为*窗口>首选项>Java>代码天生>代码和正文*/publicclassReaderTokenimplementsIterator{
privateReaderreader=null;//寄存筹办剖析的字符流privateString[]splits=null;//筹办用来支解字符流的tokenprivateStringBufferHasRead=newStringBuffer();//寄存从流中已读的字符privateString[]splitsSf=null;//因为大概存在一些统配符,以是此处寄存统配符在token时的字符,好比在abcdefgh/****/publicReaderToken(Readerreader,String[]split){super();this.reader=reader;this.splits=split;splitsSf=newString[split.length];for(inti=0;i<split.length;i++){splitsSf[i]="";}}
/*(非Javadoc)*@seejava.util.Iterator#hasNext()*/publicbooleanhasNext(){if(indexOf()>-1){returntrue;}returnfalse;}privateintcurrentsplit=-1;privateintindexOf(){
currentsplit=-1;int[]pos=newint[splits.length];for(inti=0;i<pos.length;i++){splitsSf[i]="";pos[i]=0;}//初试地位标记
try{while(true){
for(intj=0;j<pos.length;j++){if(pos[j]>=splits[j].length()){currentsplit=j;
returncurrentsplit;
//假如以后pos内里的长度到达最splits内里的最年夜值,前往以后的split}}
charreadchar=(char)reader.read();
if(readchar==-1){returncurrentsplit;}
if(readchar==65535){returncurrentsplit;}
HasRead.append(readchar);
for(inti=0;i<pos.length;i++){
charsplitposchar=splits[i].charAt(pos[i]);
if(splitposchar==readchar){pos[i]++;splitsSf[i]+=readchar;}elseif(splitposchar==*){charnextchar=splits[i].charAt((pos[i]+1));//失掉*前面一个字符,一样平常统配符都暗示为1*2if(nextchar==readchar){pos[i]++;pos[i]++;}splitsSf[i]+=readchar;}elseif(splitposchar==?){pos[i]++;splitsSf[i]+=readchar;}else{
pos[i]=0;splitsSf[i]="";}
}
}
}catch(IOExceptione){
e.printStackTrace();}
return-1;}
/*(非Javadoc)*@seejava.util.Iterator#next()*/publicObjectnext(){
inti=HasRead.length()-splitsSf[currentsplit].length();
StringBuffersf=newStringBuffer();sf=this.HasRead;HasRead=newStringBuffer();//if(i<0){//i=0;//}sf.setLength(i);returnsf;
}publicStringgetToken(){returnsplits[this.currentsplit];}publicStringgetTokenInReader(){returnsplitsSf[currentsplit];}publicObjectgetEnd(){returnthis.HasRead;}/*(非Javadoc)*@seejava.util.Iterator#remove()*/publicvoidremove(){
}publicstaticvoidmain(String[]args)throwsIOException{String[]a=newString[]{"a?a"};Strings="cefaaasdbd";ReaderTokentoken=newReaderToken(newStringReader(s),a);while(token.hasNext()){System.err.println("next---"+token.next());System.err.println("token---"+token.getToken());System.err.println("getTokenInReader---"+token.getTokenInReader());}System.err.println("end--"+token.getEnd());
//StringReaderreader=newStringReader(s);//charc;//while((c=(char)reader.read())!=-1){//System.err.println(c);//System.out.println((long)c);//}
}}
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。 |
|