1. 程式人生 > >130242014061-王紹華-第三次實驗

130242014061-王紹華-第三次實驗

單詞 順序 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-王紹華-第三次實驗