一、实验目的
1.理解不同体系结构风格的具体内涵。
2.学习体系结构风格的具体实践。
二、实验环境
硬件: (依据具体情况填写)
软件:Java或任何一种自己熟悉的语言
三、实验内容
“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。
尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。
四、实验步骤:
本例采用管道-过滤器风格实现
1、体系结构图:
2、写出主要的代码
package com.zsc.kwic;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class KWIC {
public static void main(String[] args) throws IOException {
// 文件源
String fileName = "test.txt";
// 获取上下文
List<String> sourceList = KWIC.getListFormFile(fileName);
// 循环
List<String> kwicList = KWIC.loop(sourceList);
// 按字母表排序
KWIC.sortList(kwicList);
// 输入结果
KWIC.display(kwicList);
}
/**
* 获取文件内容并存入list
*
* @author zsc
* create 2017年11月19日/update 2017年11月19日
* @param fileName
* @return
* @throws IOException
*/
public static List<String> getListFormFile(String fileName) throws IOException {
List<String> list = null;
BufferedReader br = null;
/* 读取数据 */
try {
list = new ArrayList<>();
br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "utf-8"));
String lineTxt = "";
System.out.println("===============输入=================");
// 逐行读取文件
while ((lineTxt = br.readLine()) != null) {
System.out.println(lineTxt);
list.add(lineTxt);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
/**
* 循环移动内容并返回排序后的集合
*
* @author zsc
* create 2017年11月19日/update 2017年11月19日
* @param list
* @return
*/
public static List<String> loop(List<String> list) {
List<String> kwicList = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
// 分割单词
List<String> words = Arrays.asList(list.get(i).split("\\s+"));
for (int j = 0; j < words.size(); j++) {
// 循环移动
Collections.rotate(words, 1);
kwicList.add(KWIC.listToString(words));
}
}
return kwicList;
}
/**
* list集合解析为指定格式字符串
*
* @author zsc
* create 2017年11月19日/update 2017年11月19日
* @return
*/
public static String listToString(List<String> list) {
StringBuffer sb = new StringBuffer();
for (String string : list) {
sb.append(string + " ");
}
// 去除最后一个空格并返回
return sb.toString().trim();
}
/**
* 按字母表排序
*
* @author zsc
* create 2017年11月19日/update 2017年11月19日
* @param list
*/
public static void sortList(List<String> list) {
// 按字母表排序
Collections.sort(list);
}
/**
* 显示结果
*
* @author zsc
* create 2017年11月19日/update 2017年11月19日
* @param list
*/
public static void display(List<String> list) {
System.out.println("===============输出=================");
for (String string : list) {
System.out.println(string);
}
}
}
4、显示结果:
五、实验总结
比较简单没啥问题。
作业博客要求:
标题:是学号+姓名+第3次实验