基于管道过滤器的KWIC系统实现(4)

来源:互联网 发布:新星星知我心1998全集 编辑:程序博客网 时间:2024/04/28 22:19

package lws;

import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

public class LineTransformer extends Filter{

 public LineTransformer(Pipe input, Pipe output) {
  super(input, output);
  
 }

 @Override
 protected void transform(){
     try{
       ArrayList<String> lines = new ArrayList<String>();
       CharArrayWriter writer = new CharArrayWriter();
       //To get formed lines of String
       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();
       }
       Iterator<String> iterator = lines.iterator();
       while(iterator.hasNext()){
        boolean flag=true;
        char[] chars = ((String) iterator.next()).toCharArray();
        for(int i = 0; i < chars.length; i++){
         if((chars[i]!=' ')&&flag==true){
          if((chars[i]>='a')&&(chars[i]<='z')){
           chars[i]-=32;
          }
         }else{
          flag=false;
         }
         output_.write(chars[i]);
        }
          
       }

       output_.closeWriter();
     }catch(IOException exc){
       exc.printStackTrace();
       System.err.println("KWIC Error: Could not sort circular shifts.");
       System.exit(1);
     }
 }

}

 

package lws;

import java.io.IOException;

public class Output extends Filter{

  public Output(Pipe input){
    super(input, null);
  }

  protected void transform(){
    try{
      int c = input_.read();
      while(c != -1){
        System.out.print((char) c);
        c = input_.read();
      }
    }catch(IOException exc){
      exc.printStackTrace();
      System.err.println("KWIC Error: Broken pipe");
      System.exit(1);     
    }
  }

}

 

 

package lws;

import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;

public class ShiftFilter extends Filter{
 private ArrayList<String> noiseWords;
 public ShiftFilter(Pipe input,Pipe output,ArrayList<String> al){
  super(input,output);
  noiseWords=al;
 }

 protected void transform(){
     try{
       ArrayList<String> lines = new ArrayList<String>();
       CharArrayWriter writer = new CharArrayWriter();
       //To get formed lines of String
       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();
       }
       //To delete the noisy lines of String
       deleteNoise(lines);
       //To output the operated Strings
       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);
     }

 }
 //The method to implements the function of delete lines starting by a noisy word
 private void deleteNoise(ArrayList<String> lines){
  for(int i=0;i<lines.size();i++){
   String line=new String(lines.get(i));
   StringTokenizer tokenizer = new StringTokenizer(line);
   String firstWord=tokenizer.nextToken();
   for(int j=0;j<noiseWords.size();j++){
    if(firstWord.equals(noiseWords.get(j))){
     lines.remove(i);
     i--;//If a line is deleted ,the index i must to be reduced by 1
     break;
    }
   }
  }
 }
}

原创粉丝点击