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);
}
}
}