基于管道过滤器的KWIC系统实现(3)
来源:互联网 发布:新星星知我心1998全集 编辑:程序博客网 时间:2024/04/28 22:06
package lws;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.CharArrayWriter;
import java.io.IOException;
public class Alphabetizer extends Filter{
public Alphabetizer(Pipe input, Pipe output){
super(input, output);
}
protected void transform(){
try{
ArrayList<String> lines = new ArrayList<String>();
CharArrayWriter writer = new CharArrayWriter();
int c = input_.read();
while(c != -1){
writer.write(c);
if(((char) c) == '\n'){
String line = writer.toString();
lines.add(line);
writer.reset();
}
c = input_.read();
}
sort(lines);
Iterator<String> iterator = lines.iterator();
while(iterator.hasNext()){
char[] chars = ((String) iterator.next()).toCharArray();
for(int i = 0; i < chars.length; i++)
output_.write(chars[i]);
}
output_.closeWriter();
}catch(IOException exc){
exc.printStackTrace();
System.err.println("KWIC Error: Could not sort circular shifts.");
System.exit(1);
}
}
private void sort(ArrayList<String> lines){
int size = lines.size();
for(int i = (size / 2 - 1); i >= 0; i--)
siftDown(lines, i, size);
for(int i = (size - 1); i >= 1; i--){
Object tmp = lines.get(0);
lines.set(0, lines.get(i));
lines.set(i, (String) tmp);
siftDown(lines, 0, i);
}
}
private void siftDown(ArrayList<String> lines, int root, int bottom){
int max_child = root * 2 + 1;
while(max_child < bottom){
if((max_child + 1) < bottom)
if(((String) lines.get(max_child + 1)).compareTo((String) lines.get(max_child)) > 0)
max_child++;
if(((String) lines.get(root)).compareTo((String) lines.get(max_child)) < 0){
Object tmp = lines.get(root);
lines.set(root, lines.get(max_child));
lines.set(max_child, (String) tmp);
root = max_child;
max_child = root * 2 + 1;
}else
break;
}
}
}
package lws;
import java.io.IOException;
import java.io.CharArrayWriter;
import java.util.StringTokenizer;
public class CircularShifter extends Filter{
public CircularShifter(Pipe input, Pipe output){
super(input, output);
}
protected void transform(){
try{
CharArrayWriter writer = new CharArrayWriter();
int c = input_.read();
while(c != -1){
if(((char) c) == '\n'){
String line = writer.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
String[] words = new String[tokenizer.countTokens()];
int i = 0;
while(tokenizer.hasMoreTokens())
words[i++] = tokenizer.nextToken();
for(i = 0; i < words.length; i++){
String shift = "";
for(int j = i; j < (words.length + i); j++){
shift += words[j % words.length];
if(j < (words.length + i - 1))
shift += " ";
}
shift += '\n'
char[] chars = shift.toCharArray();
for(int j = 0; j < chars.length; j++)
output_.write(chars[j]);
}
writer.reset();
}else
writer.write(c);
//The output is formatted to char[],and every word is separated by a space
c = input_.read();
}
output_.closeWriter();
}catch(IOException exc){
exc.printStackTrace();
System.err.println("KWIC Error: Could not make circular shifts.");
System.exit(1);
}
}
}
- 基于管道过滤器的KWIC系统实现(3)
- 基于管道过滤器的KWIC系统实现(1)
- 基于管道过滤器的KWIC系统实现(2)
- 基于管道过滤器的KWIC系统实现(4)
- 基于KWIC 的关键字匹配算法(管道+过滤器模式下实现)
- KWIC:管道-过滤器模式.
- KWIC:基于主程序/子程序风格的实现
- KWIC问题的实现
- KWIC系统之事件架构实现(主程序)
- 管道过滤器的实现---java语言
- 基于java过滤器实现web系统的IP访问控制
- 基于java过滤器实现web系统的IP访问控制
- KWIC系统之事件架构实现(排序模块,拆分模块,输入模块)
- KWIC系统之事件架构实现(输出模块,单词统计类,单词存储类)
- kwic系统模拟
- 软件体系结构上机实验 面向对象体系结构风格的 KWIC 关键词索引系统设计与实现 java
- KWIC-C/C++实现
- KWIC系统之事件架构实现(行存储类,行存储包装类,行存储改变事件)
- 用View绘制触摸轨迹
- Java编写的多线程端口扫描器
- compile and execute cpp file in ubuntu
- 基于管道过滤器的KWIC系统实现(1)
- 基于管道过滤器的KWIC系统实现(2)
- 基于管道过滤器的KWIC系统实现(3)
- 基于管道过滤器的KWIC系统实现(4)
- poj1207-the 3n+1 problems
- poj1401 Factorial
- poj1405-Heritage
- 关于Java中的对象数组初始化
- 关于逻辑与与按位与
- Eclipse 的Debug使用
- C++中的指针与引用