130242014061-王绍华-第三次实验
Posted 绍华~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130242014061-王绍华-第三次实验相关的知识,希望对你有一定的参考价值。
一、实验目的
1.理解不同体系结构风格的具体内涵。
2.学习体系结构风格的具体实践。
二、实验环境
硬件: (依据具体情况填写)
软件:Java或任何一种自己熟悉的语言
三、实验内容
“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。
尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。
四、实验步骤:
1、管道-过滤器风格
1.1体系结构图
1.2简述体系结构各部件的主要功能,实现思想。
上述的管道-过滤器方法,有5种过滤器:输入(input)、空格处理(trim)、循环移动(moving)、排序(sort)、输出(output)。
input: 将控制台输入的每行的数据保存到数据结构中去。
trim: 去掉首尾的空格,以及处理连续出现的空格。
moving: 对集合进行循环移位,并将移位得到的新行保存到原先集合中去。
sort: 利用Collections提供的sort()方法直接对集合进行排序。
output: 把集合按顺序输出,显示在控制台上。
1.3主要代码。
public class Kwic {
/*
*控制台手动输入
*/ public static ArrayList<String> input() { System.out.println("-----------------");
System.out.println("请输入:");
ArrayList<String> list = new ArrayList<String>();
Scanner in = new Scanner(System.in);
while (true) {
String text = in.nextLine();
if ("".equals(text)) {
break;
}
list.add(text);
}
in.close();
return list;
}
/***
* 空格处理
*/
public static ArrayList<String> trim(ArrayList<String> list) {
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
s = s.trim();
for (int j = 0; j < s.length() - 1; j++) {
if (s.substring(j, j + 2).equals(" ")) {
s = s.substring(0, j + 1) + s.substring(j + 2);
j--;
}
}
list.set(i, s);
}
return list;
}
/**
* 循环移动,并添加到集合
*/
public static ArrayList<String> moving(ArrayList<String> list) {
int count = list.size();
for (int i = 0; i < count; i++) {
String s = list.get(i);
String[] arr = s.split(" ");
for (int h = 1; h < arr.length; h++) {
s = arr[h];
for (int j = (h + 1) % arr.length; j != h; j++, j %= arr.length) {
s += " " + arr[j];
}
list.add(s);
}
}
return list;
}
/**
*排序
*/
public static ArrayList<String> sort(ArrayList<String> list) {
Collections.sort(list);
return list;
}
/**
*输出
*/
public static void output(ArrayList<String> list) {
System.out.println("------------------------");
System.out.println("输出为:");
for (String s : list) { System.out.println(s); } } public static void main(String[] args) { output(sort(moving(trim(input())))); } }
1.4显示结果
2.采用主/子程序的风格
1.1、体系结构图
1.2、简述体系结构各部件的主要功能,实现思想
读文件:从本地读取测试的文本文件
循环移位:对读取到的内容进行循环移位
排序:对移位后的结果进行排序
输出显示:将结果输出到控制台进行显示
1.3主要代码
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;
}
}
以上是关于130242014061-王绍华-第三次实验的主要内容,如果未能解决你的问题,请参考以下文章