130242014011-林泽祥-第3次实验
一、实验目的
1.理解不同体系结构风格的具体内涵。
2.学习体系结构风格的具体实践。
二、实验环境
硬件: (依据具体情况填写)
软件:Java或任何一种自己熟悉的语言
三、实验内容
“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。
四、实验步骤:
1、体系结构图:
2、简述体系结构各部件的主要功能,实现思想。
上述的主程序/子程序的方法,将问题分解为输入(Input)、移动(Shifter)、按字母表排序(Alphabetizer)、输出(Output)。
Input : 主函数调用该方法,读取数据,输出到控制台。
Shifter : 主函数调用该方法,实现移位。
Alphabetizer : 主函数调用该方法,对行数据进行按字母顺序排序
Output : 主函数调用该方法,输出到控制台
3、写出主要的代码
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.StringTokenizer; /** * @author linzexiang * */ public class SortKWIC { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File input = new File("D:\\private","input.txt"); try { input.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } SortKWIC sortKWIC = new SortKWIC2(); sortKWIC.input("D:\\private\\input.txt"); sortKWIC.shifter(); sortKWIC.alphabetizer(); sortKWIC.output(); } private ArrayList<String> kwicList = new ArrayList<String>(); private ArrayList<String> lineTxt = new ArrayList<String>(); private BufferedReader input; // 读取文件 public void input(String fileName) { File file = new File(fileName); BufferedReader reader = null; try { System.out.println("-----------------Input------------------"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { // 显示行号 System.out.println(tempString); line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } try { input = new BufferedReader(new FileReader(fileName)); } catch (Exception e) { System.err.print("wrong"); System.exit(1); } String line; try { while ((line = input.readLine()) != null) { lineTxt.add(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 移位 public void shifter() { Iterator<String> it = lineTxt.iterator(); while (it.hasNext()) { StringTokenizer strToken = new StringTokenizer(it.next()); ArrayList<String> strTokens = new ArrayList<String>(); int i = 0; // 循环添加 int count = strToken.countTokens(); while (i < count) { strTokens.add(strToken.nextToken()); i++; } // 分割+位移。 for (i = 0; i < count; i++) { StringBuffer line = new StringBuffer(); int index = i; for (int f = 0; f < count; f++) { if (index >= count) index = 0; line.append(strTokens.get(index)); line.append(" "); index++; } String word = line.toString(); kwicList.add(word); } } } // 排序 public void alphabetizer() { Collections.sort(this.kwicList, new AlphabetizerComparator()); } private class AlphabetizerComparator implements Comparator<String> { @Override public int compare(String a1, String a2) { if (a1 == null && a2 == null) { throw new NullPointerException(); } int compareValue = 0; char b1 = a1.charAt(0); char b2 = a2.charAt(0); compareValue = b1 - b2; return compareValue; } } // 输出数据 public void output() { Iterator<String> it = kwicList.iterator(); System.out.println("-----------------Output-----------------"); while (it.hasNext()) { System.out.println(it.next()); } } }
4、显示结果: