对Reader进行token的类,可以访入多个split进行解析
来源:互联网 发布:好莱坞特效制作软件 编辑:程序博客网 时间:2024/06/08 03:23
在java。util中的java.io.StringTokenizer类能对单个字符串进行解析,在jdk1.4中的split也可以对单个字符串进行解析,但都不能对Reader流进行解析,在多个字符解析的时候也不能返回分割两个字符串的字符串,下面这个类就是为了解决这个问题而写的,还可以在准备包括一些最基本的解析类型,*和?
可以设置多个split进行解析,在解析的时候返回对应的分割字符串
程序可以直接运行
/*
* 创建日期 2005-4-4
*
* 更改所生成文件模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
package com.csii.template;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.Iterator;
/**
* @author wsl
*
* 更改所生成类型注释的模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
public class ReaderToken implements Iterator {
private Reader reader = null;//存放准备解析的字符流
private String[] splits = null;//准备用来分割字符流的token
private StringBuffer HasRead = new StringBuffer();//存放从流中已经读的字符
private String[] splitsSf = null;//由于可能存在一些统配符,所以此处存放统配符在token时的字符,比如在abcdefgh
/**
*
*/
public ReaderToken(Reader reader, String[] split) {
super();
this.reader = reader;
this.splits = split;
splitsSf = new String[split.length];
for (int i = 0; i < split.length; i++) {
splitsSf[i] = "";
}
}
/* (非 Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
if (indexOf() > -1) {
return true;
}
return false;
}
private int currentsplit = -1;
private int indexOf() {
currentsplit = -1;
int[] pos = new int[splits.length];
for (int i = 0; i < pos.length; i++) {
splitsSf[i] = "";
pos[i] = 0;
} //初试位置符号
try {
while (true) {
for (int j = 0; j < pos.length; j++) {
if (pos[j] >= splits[j].length()) {
currentsplit = j;
return currentsplit;
//如果当前pos里面的长度达到最splits里面的最大值,返回当前的split
}
}
char readchar = (char) reader.read();
if (readchar == -1) {
return currentsplit;
}
if (readchar == 65535) {
return currentsplit;
}
HasRead.append(readchar);
for (int i = 0; i < pos.length; i++) {
char splitposchar = splits[i].charAt(pos[i]);
if (splitposchar == readchar) {
pos[i]++;
splitsSf[i] += readchar;
} else if (splitposchar == '*') {
char nextchar = splits[i].charAt((pos[i] + 1));
//得到*后面一个字符,一般统配符都表示为1*2
if (nextchar == readchar) {
pos[i]++;
pos[i]++;
}
splitsSf[i] += readchar;
} else if (splitposchar == '?') {
pos[i]++;
splitsSf[i] += readchar;
} else {
pos[i] = 0;
splitsSf[i] = "";
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return -1;
}
/* (非 Javadoc)
* @see java.util.Iterator#next()
*/
public Object next() {
int i = HasRead.length() - splitsSf[currentsplit].length();
StringBuffer sf = new StringBuffer();
sf = this.HasRead;
HasRead = new StringBuffer();
// if(i<0){
// i=0;
// }
sf.setLength(i);
return sf;
}
public String getToken() {
return splits[this.currentsplit];
}
public String getTokenInReader() {
return splitsSf[currentsplit];
}
public Object getEnd() {
return this.HasRead;
}
/* (非 Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
}
public static void main(String[] args) throws IOException {
String[] a = new String[] { "a?a" };
String s = "cefaaasdbd";
ReaderToken token = new ReaderToken(new StringReader(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());
// StringReader reader=new StringReader(s);
// char c;
// while((c=(char)reader.read())!=-1){
// System.err.println(c);
// System.out.println((long)c);
// }
}
}
- 对Reader进行token的类,可以访入多个split进行解析
- logstash中字符串的split,对每个子串进行json解析
- 使用CSS样式对表格进行美化并对伪类的使用进行解析
- 对json格式的数据进行解析
- 使用split,gzip和pipe可以方便,快速的进行exp imp
- 可以自动的写个小程序对其进行分页 (转)
- oracle to_char()是可以对返回值进行计算的
- 作业可以对作业中的进程进行一系列的限制
- matlab-线性代数 对角化是否可以进行的判断
- 可以对EditText进行实时监控的方法
- 列可以设置 :formatter,对列的值进行处理
- 可以对联系人进行查增删改的通讯录
- cocos2d-x 对传入的字符串进行解析分割 解析
- 对JSON字符串进行解析
- php ZIP 类,可以对网站进行 整理压缩与解压缩的类
- j2me中对颜色进行汇总的一个类,如果有朋友需要可以拿来用。
- 使用base64对图片的二进制进行编码,使其可以利用ajax进行显示
- 使用base64对图片的二进制进行编码,使其可以利用ajax进行显示
- java操作word,pdf的四种武器
- 也说页面重定向
- 教你做MSN样式的控件
- DirectX9 3D 快速上手 5
- 在博客园注册了一个地址
- 对Reader进行token的类,可以访入多个split进行解析
- WebWork深度探索
- 55种网页常用小技巧(javascript)
- 寶鋼增發5,000,000,000﹐新股還在發行﹐今天股市再次跌破1200點。
- MFC开始学习
- 神秘的网站
- C#中的正则表达式
- 4/18/2005
- 留言簿