一、实验目的
1.理解不同体系结构风格的具体内涵。
2.学习体系结构风格的具体实践。
二、实验环境
硬件: (依据具体情况填写)
软件:Java或任何一种自己熟悉的语言
三、实验内容
“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。
尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。
四、实验步骤:
要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图,以及运行结果截图。
测试文件
A采用主/子程序的风格
1、体系结构图
2、简述体系结构各部件的主要功能,实现思想
读文件:从本地读取测试的文本文件
循环移位:对读取到的内容进行循环移位
排序:对移位后的结果进行排序
输出显示:将结果输出到控制台进行显示
3、主要代码
package com.lqc;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String[]> result = getContext(new File("D:\\Desktop\\a.txt"));
result = loopShift(result);
sort(result);
print(result);
}
private static void print(List<String[]> result) {
for (String[] strings : result) {
for (String string : strings) {
System.out.printf(string + " ");
}
System.out.println();
}
}
private static void sort(List<String[]> shiftStrList) {
shiftStrList.sort(Comparator.comparing(o -> o[0]));
}
private static List<String[]> loopShift(List<String[]> strList) {
List<String[]> shiftStrList = new ArrayList<>();
for (String[] strings : strList) {
for (int i = 0; i < strings.length; i++) {
StringBuilder builder = new StringBuilder();
int j = i;
for (int times = 0; times < 3; times++) {
builder.append(strings[j]).append(",");
j++;
if (j == strings.length) {
j = 0;
}
}
shiftStrList.add(builder.toString().split(","));
}
}
return shiftStrList;
}
private static List<String[]> getContext(File file) {
List<String[]> strList = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
//以空格为分隔符
strList.add(line.split(" "));
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return strList;
}
}
4、结果
B采用管道过滤器的风格
1、体系结构图
2、简述体系结构各部件的主要功能,实现思想
读文件:从本地读取测试的文本文件
循环移位:对读取到的内容进行循环移位
排序:对移位后的结果进行排序
输出显示:将结果输出到控制台进行显示
3、主要代码
package com.lqc;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String[]> result = getContext(new File("D:\\Desktop\\a.txt"));
// result = loopShift(result);
// sort(result);
// print(result);
}
private static List<String[]> getContext(File file) {
List<String[]> strList = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
//以空格为分隔符
strList.add(line.split(" "));
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
loopShift(strList);
return strList;
}
private static List<String[]> loopShift(List<String[]> strList) {
List<String[]> shiftStrList = new ArrayList<>();
for (String[] strings : strList) {
for (int i = 0; i < strings.length; i++) {
StringBuilder builder = new StringBuilder();
int j = i;
for (int times = 0; times < 3; times++) {
builder.append(strings[j]).append(",");
j++;
if (j == strings.length) {
j = 0;
}
}
shiftStrList.add(builder.toString().split(","));
}
}
sort(shiftStrList);
return shiftStrList;
}
private static void sort(List<String[]> shiftStrList) {
shiftStrList.sort(Comparator.comparing(o -> o[0]));
print(shiftStrList);
}
private static void print(List<String[]> result) {
for (String[] strings : result) {
for (String string : strings) {
System.out.printf(string + " ");
}
System.out.println();
}
}
}
4、结果