基于文本分析的公交线路查询

来源:互联网 发布:python导出docker镜像 编辑:程序博客网 时间:2024/04/29 09:45

老师给的一个作业,针对公交路线文本进行公交路线查询处理。附数据集。

代码如下:package example;
import java.applet.Applet;
import java.awt.*;
public class client {
   public static void main(String  args[]){
        Windows w=new Windows("公交路线查询");

    }

}//class

package example;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Windows extends Frame  implements ActionListener{  
    WordCount  a=new WordCount();
    TextField begin,end,line,station;  Button search1,search2,search3;
    TextArea result;
   public   Windows(String s)  
    {  
       
       super(s);          
        a.readtxt("/home/cyl/桌面/KMBusLines.txt");
        setLayout(new FlowLayout(FlowLayout.CENTER));  
        begin = new TextField("请输入起始点", 10);  
        begin.setEditable(true);  
        end = new TextField("请输入目的地",10);  
        end.setEditable(true);
        line=new TextField("请输入要查询的路线",60);
        line.setEditable(true);
        station=new TextField("请输入要查询的站点",60);
        station.setEditable(true);
        search1=new Button("查询路线");
        search2=new Button("查询线路信息");  
        search3=new Button("查询站点");
        result=new TextArea("",30,60);
        result.setEditable(true);
      
        add(begin);  
        add(end);
        add(search1);
        add(line);
        add(search2);
        add(station);
        add(search3);
        add(result);
        setBounds(500, 0, 600, 700);  
        setVisible(true);  
        validate();
         search1.addActionListener(this);
         search1.setActionCommand("road");
         search2.addActionListener(this);
         search2.setActionCommand("line");
         search3.addActionListener(this);
         search3.setActionCommand("station");
         
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource()==search1){
            result.setText(a.onestep(begin.getText(),end.getText()));
            //System.out.println(a.onestep(begin.getText(),end.getText())+"哈哈哈哈哈哈");
        }
        if(e.getSource()==search2){
            result.setText(a.linesearch(line.getText()));
        }
        if(e.getSource()==search3){
            result.setText(a.stasearch(station.getText()));
        }
    }  

}

package example;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;

public class WordCount {
    static String totalText=null;//所有文本信息
    static ArrayList totallines=new ArrayList(); //所有线路信息
    static ArrayList   totalstation =new ArrayList();//所有站点信息
        /*
         *  读取文本信息*/
        public  String  readtxt(String filepath){
            try {
                String encoding="GB2312";    //预定义文本编码格式
                File busline=new File(filepath);            
                    if(busline.isFile()&&busline.exists()){//判断文件在否
                    InputStreamReader read=new InputStreamReader(new FileInputStream(busline),encoding);
                    BufferedReader  buff=new BufferedReader(read);
                    String text=null;String temarray[];//临时变量
                    temarray =new String [50];
                    while((text=buff.readLine())!=null){    //遍历文本文件    
                        totallines.add(text);//把一条路线的信息加入数组totallines
                        text=null;//临时变量清零
                    }//while
                    }//try
                    else{
                System.out.println("找不到文件");}//try
            }catch(Exception e){
                System.out.println("出错");    //打印异常信息
                
            }
            return null;
        }
        /*
        *路线查询*/
public String  linesearch(String s){
    int i=0;String result=null;
    for(;i<totallines.size();i++){//遍历totallines直到找到要找的路线
            String[] temp=null;
            temp=( (String) totallines.get(i)).split("/");
            //System.out.println(temp[0]);
            if(s.equals(temp[0]))
                {                                
                System.out.println(totallines.get(i));
                result=totallines.get(i).toString();
                break;}
            temp=null;
                }//for
if (result==null)
    return "没有该条线路,请重新输入";
    else
    return result ;
    
}
/*
 * 统计路线数目*/
public int countline(){
    return totallines.size();

}
/*
*站点查询*/
public  String  stasearch(String s){
    int i=0;String result=null;
    for(;i<totallines.size();i++){
        //遍历totallines来查找站点
        String temp[]=null;
        temp=((String) totallines.get(i)).split("/");
        for(int t=0;t<temp.length;t++){
            if(s.equals(temp[t])){
                System.out.println(totallines.get(i));
                result=totallines.get(i).toString();
            }//if
        }//for t
        
}//for i
    if (result==null)
        return "没有输入的站点,请重新输入";
        else
        return result ;
        
}
/*
 * 站点数统计*/
public int countsta(){
    for (int i=0;i<totallines.size();i++){//遍历totallines
        String temp[]=null;
        temp=((String) totallines.get(i)).split("/");
        //对每一条路线文本进行切割,并把站点信息存入totalstation数组
                        if(totalstation.size()==0){
                        for(int l=1;l<temp.length;l++){
                                totalstation.add(temp[l]);
                            }
                        i++;continue;
                            }//if totalstation 不为空
        for(int t=1;t<temp.length;t++){
            //遍历totalstation,把不存在于该数组中的新站点加进去
                        for(int k=0;k<totalstation.size();k++){
                                    if(temp[t].equals( (String) totalstation.get(k))){
                                                break;
                        //若有相同马上跳出循环,提高效率
                            
                                            }//if
                                    if(k==totalstation.size()-1){            
                                        totalstation.add(temp[t]);}
                                }//for totalstation

        }//for temp
        
        temp=null;
    }//for totallines
    System.out.println(totalstation.size());
    return totalstation.size();
    //返回totalstation数组的大小即是站点的数目
}
/*
 * 打印所有路线*/
public void showlines (){
        for(int i=0;i<totallines.size();i++){
            //遍历totalstation数组,打印所有路线信息
            System.out.println(totallines.get(i));
        }
}
/*
 * 打印所有站点*/
public void showstations(){
        this.countsta();
        //写的时候没想好,把totalstation的创建写在countsta函数中了,不想改了,只好调用该函数来获得totalstation数组
    for(int o=0;o<totalstation.size();o++){
        //遍历totalstation并打印出来
        System.out.println(totalstation.get(o));
        
    }
}
/*
 * 路线查询-不换乘*/
public String onestep(String begin,String endding){
    //参数表示起始点和目的地
    int key=0,result=0;String stemp=null;
        for(int i=0;i<totallines.size();i++){
            String temp[]=null;int tb=0,te=0;
            temp=((String )totallines.get(i)).split("/");
            for(int t=1;t<temp.length;t++){
                if(begin.equals(temp[t])){
                    key++;
                    tb=t;
                }//if  begin
                if(endding.equals(temp[t])){
                    key++;te=t;
                }
                if(key==2&&tb<te){
                    //System.out.println(stemp=totallines.get(i).toString());
                    stemp=totallines.get(i).toString();
                    System.out.println(stemp);
                    key=3;
                    result++;
                    break;
                }
                
                
            }//for temp.length
            key=0;tb=0;te=0;
        }//for totaolines.seze
    if(result==0){
        System.out.println("不能直达,需要换乘");
        //this.morestep(begin, endding);
        
    }
    if(stemp==null)
        return "不可直达,需要换乘";
    else return stemp;
}


  /*
   * public static void main(String[] args) {
        // TODO Auto-generated method stub

    //    java.util.Scanner input =new  Scanner(System.in);
        //String instructor=input.next();
    
        WordCount  w=new WordCount();
        w.readtxt("/home/cyl/桌面/KMBusLines.txt");
     //   w.linesearch("25路去程(6:00-21:30江东花城-永平路)");
     //   System.out.println( w.countline());
        //w.stasearch("太平村(金马文化村)");
     // w.countsta();
     //     w.showlines();
        //w.showstations();
        
        //String s=w.onestep("白马","昆明站");
        //System.out.println(s);
    
        
    }
*/
}


0 0
原创粉丝点击