




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)2:軟件體系結(jié)構(gòu)風(fēng)格實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康?)初步了解不同的體系結(jié)構(gòu)風(fēng)格2)掌握不同體系結(jié)構(gòu)風(fēng)格的實(shí)現(xiàn)二、實(shí)驗(yàn)學(xué)時(shí) 4學(xué)時(shí)。三、實(shí)驗(yàn)方法根據(jù)KWIC的描述,用所熟悉的語(yǔ)言,完成實(shí)驗(yàn)內(nèi)容。四、實(shí)驗(yàn)環(huán)境Windows7旗艦版 jdk1.6 Eclipse3.7.0五、實(shí)驗(yàn)內(nèi)容2)完成基于管道過濾器風(fēng)格的KWIC實(shí)現(xiàn)六、實(shí)驗(yàn)操作步驟1. KWIC描述:KWIC索引系統(tǒng)接受一些行,每行有若干字,每個(gè)字由若干字符組成;每行都可以循環(huán)移位。重復(fù)地把第一個(gè)字刪除,然后接到行末; KWIC把所有行的各種移位情況按照字母表順序輸出。完成基于管道過濾器風(fēng)格的KWIC實(shí)現(xiàn)Main類packa
2、ge kwic_pipe;import java.io.File;import java.util.Scanner;public class Main public static void main(String args) File infile = new File("e:mykwic_in.txt"); File outfile = new File("e:mykwic_out.txt"); Scanner inputfile; Scanner outputfile; try inputfile = new Scanner(infile); out
3、putfile = new Scanner(outfile); / 定義三個(gè)管道 Pipe pipe1 = new Pipe(); Pipe pipe2 = new Pipe(); Pipe pipe3 = new Pipe(); / 定義四種過濾器 Input input = new Input(infile, pipe1); Shift shift = new Shift(pipe1, pipe2); Output output = new Output(pipe3, outfile); / 啟動(dòng)四種過濾器的線程 input.transform() shift. transform ();
4、 output. transform (); / 直接輸出結(jié)果 System.out.println("- infile -"); String str = null; while (inputfile.hasNextLine() str = inputfile.nextLine(); System.out.println(str); System.out.println("input end"); Thread.sleep(3000); System.out.println("- outfile -"); while (output
5、file.hasNextLine() System.out.println(str); inputfile.close(); outputfile.close(); catch (Exception e) e.getMessage(); Filter類package kwic_pipe;import java.io.IOException;public abstract class Filter /定義輸入管道 protected Pipe input; /定義輸出管道 protected Pipe output; private boolean isStart = false; Filter
6、(Pipe input, Pipe output) this.input = input; this.output = output; / 防止多次調(diào)用,調(diào)用之后線程開始執(zhí)行 public void start() if(!isStart) isStart = true; Thread thread = new Thread(); thread.start(); /線程的 run 方法 public void run() try this.transform(); catch (IOException e) e.getMessage(); /將輸入數(shù)據(jù)轉(zhuǎn)換為所需數(shù)據(jù)并寫入輸出管道 /由子類實(shí)現(xiàn)
7、抽象方法 protected abstract void transform()throws IOException;Pipe類package kwic_pipe;import java.io.IOException;import java.io.PipedReader;import java.io.PipedWriter;import java.io.PrintWriter;import java.util.Scanner;public class Pipe /輸入管道 private Scanner pipereader; /輸出管道 private PrintWriter pipewri
8、ter; public Pipe()PipedWriter pw = new PipedWriter();PipedReader pr = new PipedReader();trypw.connect(pr); catch (IOException e)e.getMessage();pipewriter = new PrintWriter(pw);pipereader = new Scanner(pr); /讀入一行數(shù)據(jù)到管道 /return 讀入的數(shù)據(jù) public String readerLine() throws IOException return pipereader.nextL
9、ine(); /從管道輸出一行數(shù)據(jù) public void writerLine(String strline) throws IOException pipewriter.println(strline); /將讀管道關(guān)閉,調(diào)用該方法后,不能再?gòu)墓艿乐凶x數(shù)據(jù) /如不能關(guān)閉則拋出異 public void closeReader() throws IOException pipereader.close(); /先刷新數(shù)據(jù),在將寫管道關(guān)閉,調(diào)用該方法后,不能向管道中寫數(shù)據(jù) /如不能關(guān)閉則拋出異常 public void closeWriter() throws IOException pipe
10、writer.flush(); pipewriter.close(); Alphabetizer類 package kwic_pipe;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;public class Alphabetizer extends Filter private ArrayList<String> al = new ArrayList<String>(); Alphabetizer(Pipe input, Pipe output) su
11、per(input, output); /對(duì)讀入的數(shù)據(jù)進(jìn)行排序 protected void transform() throws IOException String templine = null; /讀入數(shù)據(jù) while(templine = input.readerLine() != null) al.add(templine); /按字母表排序 Collections.sort(al); /對(duì)排序后的數(shù)據(jù)進(jìn)行輸出 for(int i = 0; i < al.size(); i+) output.writerLine(al.get(i); input.closeReader();
12、 output.closeWriter(); Shift類package kwic_pipe;import java.io.IOException;import java.util.ArrayList;public class Shift extends Filter /單詞的列表 private ArrayList<String> wordlist = new ArrayList<String>(); /重組后的行的列表 private ArrayList<String> linelist = new ArrayList<String>();
13、Shift(Pipe input, Pipe output) super(input, output); Override protected void transform() throws IOException String templine = "" /讀數(shù)據(jù) while(templine = input.readerLine() != null) /將數(shù)據(jù)拆分為不同單詞 this.lineSplitWord(templine); /將單詞重組為句子 this.recombination(); /輸出重組結(jié)果 for(int i = 0; i < linelis
14、t.size(); i+) output.writerLine(linelist.get(i); /清空wordlist、linelist和templine wordlist.clear(); linelist.clear(); templine = "" input.closeReader(); output.closeWriter(); /從一行中提取單詞存入單詞表中 private void lineSplitWord(String line) String word = "" int i = 0; while(i < line.length
15、() if(line.charAt(i) != ' ') word += line.charAt(i); else wordlist.add(word); i+; private void recombination() for(int j = 0; j < wordlist.size(); j+) String templine = "" for (int k = wordlist.size() - 1 - j; k < wordlist.size(); k+) templine += wordlist.get(k) + " &quo
16、t; for (int m = 0; m < wordlist.size() - 1 - j; m+) if(m != wordlist.size() - j - 2) templine += wordlist.get(m) + " " else templine += wordlist.get(m); linelist.add(templine); Input類package kwic_pipe;import java.io.File;import java.io.IOException;import java.util.Scanner;public class I
17、nput extends Filter /輸入文件的文件名 private File infile; Input(File file, Pipe output) super(null, output); this.infile = file; Override /讀取數(shù)據(jù) protected void transform() throws IOException Scanner sc = new Scanner(infile); String templine = "" while(templine = sc.nextLine() != null) output.writerLine(templine); output.closeWriter(); sc.close(); Output類package kwic_pipe;import java.io.File;import java.io.IOException;import java.io.PrintWriter;public class Output extends Filter /輸出文件的文件名 private File file; Output(Pipe input, File file) super(input, null); this.file = file
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告牌租用協(xié)議樣本3篇
- 戶口遷移全權(quán)代理3篇
- 城市供水設(shè)施水箱招標(biāo)2篇
- 糧食倉(cāng)儲(chǔ)企業(yè)綠色經(jīng)濟(jì)企業(yè)綠色經(jīng)濟(jì)可持續(xù)發(fā)展目標(biāo)考核試卷
- 生物質(zhì)能源產(chǎn)業(yè)政策解讀考核試卷
- 窄軌機(jī)車車輛材料選用與應(yīng)用考核試卷
- 美容儀器在皮膚管理技術(shù)的研究與發(fā)展考核試卷
- 電聲器件在家庭影院系統(tǒng)中的應(yīng)用考核試卷
- 2025員工借用合同格式范本
- 2025電子產(chǎn)品銷售合同電子產(chǎn)品銷售合同模板
- 2024中考英語(yǔ)必考1600詞匯分類速記表
- 江蘇泰州市泰興經(jīng)濟(jì)開發(fā)區(qū)國(guó)有企業(yè)招聘筆試題庫(kù)2024
- 2024年風(fēng)力發(fā)電運(yùn)維值班員(技師)技能鑒定考試題庫(kù)-下(判斷題)
- DL∕T 1709.3-2017 智能電網(wǎng)調(diào)度控制系統(tǒng)技術(shù)規(guī)范 第3部分:基礎(chǔ)平臺(tái)
- 考核辦法和考核方案
- 化妝品生產(chǎn)OEM合同書
- 海上CANTITRAVEL平臺(tái)樁基施工關(guān)鍵技術(shù)應(yīng)用v7
- 有色金屬冶金概論課程教案
- 華為MA5800配置及調(diào)試手冊(cè)
- 中國(guó)生產(chǎn)安全行業(yè)市場(chǎng)運(yùn)行動(dòng)態(tài)及投資發(fā)展?jié)摿Ψ治鰣?bào)告
- 2023-2024年電子物證專業(yè)考試復(fù)習(xí)題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論