130242014061-王紹華-第三次實驗
阿新 • • 發佈:2017-11-20
單詞 順序 add 功能 實現 java read 按順序 arraylist
一、實驗目的
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;
}
}
1.4結果
130242014061-王紹華-第三次實驗