導航:首頁 > 編程知識 > 搜索字典用java怎麼編程

搜索字典用java怎麼編程

發布時間:2023-06-14 20:26:54

① 怎麼用java 開發一個搜索引擎呀

一.創建索引

1.一般創建索引的核心步驟

(1).創建索引寫入對象IndexWriter:

IndexWriter indexWriter = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),create);

參數說明:INDEX_STORE_PATH:索引文件存放路徑

new StandardAnalyzer():分詞工具

create:此參數為Boolean型,true表示重新創建整個索引,false表示增量式創建索引。

(2).創建文檔模型,並用IndexWriter對象寫入

Document doc = new Document();

Field field1 = new Field(fieldName1, fieldValue ,Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field1);

Field field2 = new Field(fieldName2, fieldValue ,Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field2);

……

indexWriter.addDocument(doc);

indexWriter.close();

參數說明:

Document:負責搜集數據源,它可以從不同的物理文件提取數據並放入同一個Document中或從一個物理文件中提取出不同的數據並放入同一個Document中。

如下圖所示

二.搜索索引

1.lucene搜索的核心步驟:

String[]fields={「title」,「summary」,……};//要查找的field范圍

BooleanClause.Occur[]flags={BooleanClause.Occur.SHOULD, BooleanClause.Occur.MUST ,……};

Queryquery = MultiFieldQueryParser.parse(queryStr, fields,flags,new StandardAnalyzer());

Hitshits=newIndexSearcher(INDEX_STORE_PATH).search(query);

for (int i = 0;i < hitsLength ; i++)

{

Document doc = hits.doc(i);

String title = doc.get(「title」);

String summary = doc.get(「summary」);

//搜索出來的結果高亮顯示在頁面上

if (title != null) {

TokenStream tokenStream = analyzer.tokenStream(「title」,new StringReader(title));

String highlighterValue = highlighter.getBestFragment(tokenStream, title) ;

if(highlighterValue != null){

title = highlighterValue ;

}

//log.info("SearchHelper.search.title="+title);

}

if(summary!= null){

TokenStream tokenStream = analyzer.tokenStream(「summary」,new StringReader(summary));

String highlighterValue = highlighter.getBestFragment(tokenStream, creator) ;

if(highlighterValue != null){

summary = highlighterValue ;

}

//log.info("SearchHelper.search. summary ="+ summary);

}

}

2.結合平台構造搜索模塊

PageData類用來存放檢索結果集數據。

PageInfo類用來存放頁面相關信息例如,PageData對象集合、總記錄個數、每一頁的記錄數、總頁面數量等等。

SearchHelper用來充當整個搜索模塊的對外介面。

三.為平台組件添加索引的步驟(以知識中心為例)

1.在com.cscec.oa.searchengine.extend.mole目錄下添加一個新的package

例如:com.cscec.oa.searchengine.extend.mole.resourcestore

2.在新的目錄下建立data package並建立相應的數據類,並使這個數據類繼承BeanData。

例如:

package com.cscec.oa.searchengine.extend.mole.resourcestore.data

public class ResourceStoreBeanData extends BeanData{

}

3.與data package同一級目錄建立manager package並建立相應管理類,並使這個管理類繼承BeanDataManager

例如:

com.cscec.oa.searchengine.extend.mole.resourcestore.manager

public class extends BeanDataManager{

}

4.以管理員的身份登陸OA後,在菜單中找到「索引模塊管理」鏈接,將相應信息添加完成後,便可以在List頁面點擊「創建索引」對該模塊的數據進行索引的建立,建立完成後便可以進行查詢。

② java字典怎麼使用

Map可以實現類似資料庫的功能。比如一個人的姓名和年齡信息你可以存在一個Map裡面,就像這樣: Map map = new HashMap(); map.put("張三", 40)

③ java 編程,搜索txt中關鍵字

import java.io.*;
public class Keyword{
public void test(String keyword)throws IOException{
String fileName = "MagazineList.txt";
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String nextLine;

int line=1;
while((nextLine=br.readLine())!=null){
if(nextLine.indexOf(keyword)>-1){
System.out.println(line+"行 "+nextLine);
}
line++;
}
}

public static void main(String[] args)throws IOException{
new Keyword().test("java");
}
}

一個完整的例子,請參考

④ java如何實現文件搜索功能

java實現文件搜索主要使用類和正則表達式,如下示例:

packagecom.kiritor.util;

importjava.io.File;
importjava.io.FileFilter;
importjava.util.Arrays;
importjava.util.Collections;
importjava.util.List;

/**
*文件的相關操作類
*
*@authorKiritor
*/
publicclassFileOperation{
;
privatestaticStringfilePath;
privatestaticFile[]fileList=null;//保存文件列表,過濾掉目錄

publicFileOperation(){

}

/**構造函數的參數是一個目錄*/
publicFileOperation(Stringpath){
Filefile=newFile(path);
if(file.isDirectory())
this.contentPath=path;
else
this.filePath=path;
}
/**獲取文件列表*/
publicstaticFile[]getFiles(){
if(contentPath==null){

Filefile=newFile(filePath);
fileList=newFile[1];
fileList[0]=file;
returnfileList;
}
fileList=newFile(contentPath).listFiles(newFileFilter(){

/**使用過濾器過濾掉目錄*/
@Override
publicbooleanaccept(Filepathname){
if(pathname.isDirectory())
{
returnfalse;
}else
returntrue;
}
});
returnfileList;
}

/**對當前目錄下的所有文件進行排序*/
publicstaticFile[]sort(){
getFiles();
Arrays.sort(fileList,newFileComparator());
returnfileList;
}

publicstaticvoidtree(Filef,intlevel){
StringpreStr="";
for(inti=0;i<level;i++){
preStr+="";
}
File[]childs=f.listFiles();
//返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。
for(inti=0;i<childs.length;i++){
System.out.println(preStr+childs[i].getName());
if(childs[i].isDirectory()){
tree(childs[i],level+1);
}
}
}

//提供一個"比較器"
.util.Comparator<File>{
@Override
publicintcompare(Fileo1,Fileo2){
//按照文件名的字典順序進行比較
returno1.getName().compareTo(o2.getName());
}

}
}

⑤ 關於在Java編程的時候如何讀取一些字典文件,文件的後綴名為dict 或者 dct

.dic是一種詞典文件格式,Dic文件由若干單詞單元組成,每一個單元包含了單詞與解釋信息,每個專單詞單元以單詞開始,屬解釋結束。
相鄰的兩個單詞單元之間沒有間隔(這樣使文件盡可能的小)。
打開方式:
用16位或者32位文件編輯器打開這類文檔
Windows操作系統的記事本(16位)可以打開,一些詞典軟體(如金山詞霸)可以打開 「開心字典」、「中文化精靈」、「Resource Modifier」等軟體的「對照文本格式」支持這種.dic文件 560+等NP系列的專業詞典的格式,只能在機型上使用;
打開詞典軟體,里邊看有無添加詞庫選項。

⑥ 一個Java編寫的英漢詞典

說先說:你的代碼有錯誤,在最下面,我已經該過了,不是大問題。
如果你想學好java的話,可以根據這個代碼加上我的註解去理解,但不要學這個代碼的變成方式或者說變成習慣,這個代碼基本上無誤,但犯了一些常識性問題,如果養成了這些不好的習慣對以後的編程會有壞的影響。
我是英文學的java,所以有些註解可能不通順,但我盡力而為了。 有的註解有點長,所以你復制到編譯器後稍微編輯一下就可以運行。代碼是可以運行,沒有問題的。

------------------------------------

import javax.swing.*; //用來創建圖形界面,如窗口,表格,按鈕等。
import java.awt.*; //作用同上,但已經很少用,能用swing的地方就不要用awt
import java.awt.event.*;//事件管理和控制
import java.sql.*; //資料庫語句和操作
import java.lang.System;//這個不知道

/*下面的這6個沒有用,純屬寫出來嚇人*/
import javax.swing.tree.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.lang.String.*;

class Mywindow extends JFrame implements ActionListener//這個類implements actionlistener,意思就是它自己就可以執行actionListener的任務
{
JTextField txf=new JTextField(20); //建一個文字編輯框,長度20(只可以輸入一行文字)
JTextArea jt=new JTextArea(10,30);//建一個文字編輯區域,長10寬30(可以回車然後輸入多行文字)
JButton btn1=new JButton("查詢");//建一個 查詢 按鈕

Mywindow()//構造函數,每個類必有的,可以為空
{
JFrame frm=new JFrame("Search");//建一個窗口(讓其他的東西有地方可放,和容器一樣。是3個最高級別的容器之一,其他兩個是applet和window)

frm.setBounds(400,300,450,350);//設置大小和位置,前兩個是坐標,後兩個是大小

Container con=getContentPane();//建一個awt容器對象,用來添加其他元素,最好用這個添加元素。像:frm.add(all); 可以寫成 con.add(all);

JPanel pnl4=new JPanel();//建一個面板用來添加其他元素(第二級別容器,最後需要被添加在frame上)
pnl4.setBorder(BorderFactory.createTitledBorder("Search"));//設置邊框樣式
pnl4.add(txf);//把文字編輯框添加到面板上
pnl4.add(btn1);//把按鈕添加到面板上
btn1.addActionListener(this);//添加事件行為監聽器(this),this意思是當前對象,呼應 implements ActionListener

JPanel pnl5=new JPanel();//同上
pnl5.setBorder(BorderFactory.createTitledBorder("Result"));//同上
jt.setWrapStyleWord(true);//這個忘了
jt.setLineWrap(true);//在區域規定的寬度下,如果文字的輸入到一行最後則會自動令其一行繼續,如果是(false),文字輸入就會在這一行繼續知道回車
pnl5.add(new JScrollPane(jt));//個這個面板添加右側滾動條,當文字輸入超過 長* 寬後 滾動條出現

JPanel all=new JPanel();//同上
all.setLayout(new BorderLayout());//設置布局,borderlayout()分東西南北(上下左右)中五個部分 無論窗口多大,中間佔得面積最大
all.add(pnl4,BorderLayout.NORTH);//添加一個面板在上面
all.add(pnl5,BorderLayout.CENTER);//添加一個在中間

frm.add(all);//把最大的這個面板添加到窗口上 也可以用con.add(all);
frm.setVisible(true);//設置窗口顯示屬性 如果false就是不顯示
frm.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//加一個窗口監聽 如果點小紅叉關閉窗口則系統推出
}

public void actionPerformed(ActionEvent e)//作為ActionListener類的構造函數,如果你的class implements ActionListenser, 那就必須得有這個,也可以單獨寫一個class,不過有點麻煩
{
if(e.getSource()==btn1)//當按鈕被點擊的時候
{
String str="";//建一個字元串
String tmp=this.txf.getText();//同上,這個字元串的值是當前對象(窗口)中,文本框輸入的值

for(int k=0;k<tmp.length();k++)//建一個 永久循環
str+=tmp.charAt(k)+"%";//把 % 插入每一個字元後面, 作用後面說

String sql=null;//同上
Statement stmt=null;//定義一個stmt,用來建資料庫連接的

sql="select * from chinese where charsound like'"+str+"'";//創建一個sql資料庫語句,但它本身還是一個字元串
System.out.println(sql);//系統顯示創建的語句,通常找錯時候用的

try{//try 和 catch 的作用一句兩句說不清楚 不知道你就自己查查
Class.forName("com.mysql.jdbc.Driver");//或者:Class.forName("org.gjt.mm.mysql.Driver");關聯mysql資料庫驅動
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/japan?user=root&password=sa");//建立連接,資料庫名japan(為什麼不是chinese?)用戶名root密碼sa
stmt=conn.createStatement();//建立statement對象,用來發送sql語句到資料庫

ResultSet rs=stmt.executeQuery(sql);//運行語句並建立一個查詢結果的集合
System.out.println("\n------------------------search :"+str+"-------------------------------");//同上

jt.setText("");//清空文本編輯區域
while(rs.next())//while循環,當還有結果的時候,把所有查詢結果添加加到文本編輯區域中
{
jt.append(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
System.out.print(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
}
stmt.close();//關閉關連,很重要。

}
catch(Exception eq){System.out.println("error");}
//--------------------------------------------------------------end btn1-------
}
}

public static void main(String args[])
{
Mywindow win=new Mywindow();//建立一個 mywindow 對象
win.pack();//將所有元素整合
win.show();
}
}

閱讀全文

與搜索字典用java怎麼編程相關的資料

熱點內容
逍遙安卓微信驗證 瀏覽:579
5g網路什麼時候普及河北邢台 瀏覽:709
編程和運營哪個更適合創業 瀏覽:893
尤里x怎麼升級 瀏覽:399
做業務績效考核需要哪些數據 瀏覽:433
dnf85版本劍魔刷圖加點 瀏覽:407
手機硬碟測試架可以讀取哪些數據 瀏覽:704
ug前後處理結算結果找不到文件 瀏覽:769
網頁框架拆分代碼 瀏覽:382
未來十年網路安全有什麼影響 瀏覽:362
win10更新後進不了劍靈 瀏覽:243
iphone471激活出錯 瀏覽:648
怎麼把文件拷到u盤 瀏覽:620
中伊簽署文件視頻 瀏覽:661
電信光寬頻網路不穩定 瀏覽:504
網路崗軟路由 瀏覽:995
黑莓z10在哪裡下載app 瀏覽:310
net批量下載文件 瀏覽:696
怎麼把蘋果一體機文件拷貝 瀏覽:117
sql文件怎麼寫 瀏覽:9

友情鏈接