現(xiàn)可以提供兩種思路:
十載的尖山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整尖山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“尖山網(wǎng)站設(shè)計(jì)”,“尖山網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
1.String或是StringBuffer(建議用) 中的indexOf("中華")方法,查找給定的的字符串中是否有給定詞表中的詞。
2.借鑒編譯原理中的狀態(tài)裝換的思想。
先編寫一個(gè)狀態(tài)機(jī),用于測試給定字符串中的詞是否滿足詞表中的內(nèi)容。
寫在最后:1)建議使用第一種方法,因?yàn)樵趈ava 內(nèi)部實(shí)現(xiàn)的查找操作其實(shí) 和你想得思路是相同的,不過他的效率會(huì)高些。
2)如果個(gè)人的編程能力比較強(qiáng)或是不考慮效率只是想實(shí)現(xiàn)專有的分詞算法。可以使用第二種方法。
3)以上的兩種方法都可以使用多線程來提高程序的效率。
import?java.io.Reader;
import?java.io.StringReader;
import?org.apache.lucene.analysis.*;
import?org.apache.lucene.analysis.cjk.CJKAnalyzer;
import?org.apache.lucene.analysis.cn.ChineseAnalyzer;
import?org.apache.lucene.analysis.standard.StandardAnalyzer;
import?org.mira.lucene.analysis.MIK_CAnalyzer;
public?class?JeAnalyzer?{
public?static?void?testStandard(String?testString)?{
try?{
Analyzer?analyzer?=?new?StandardAnalyzer();
Reader?r?=?new?StringReader(testString);
StopFilter?sf?=?(StopFilter)?analyzer.tokenStream("",?r);
System.err.println("=====standard?analyzer====");
Token?t;
while?((t?=?sf.next())?!=?null)?{
System.out.println(t.termText());
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
public?static?void?testCJK(String?testString)?{
try?{
Analyzer?analyzer?=?new?CJKAnalyzer();
Reader?r?=?new?StringReader(testString);
StopFilter?sf?=?(StopFilter)?analyzer.tokenStream("",?r);
System.err.println("=====cjk?analyzer====");
Token?t;
while?((t?=?sf.next())?!=?null)?{
System.out.println(t.termText());
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
public?static?void?testChiniese(String?testString)?{
try?{
Analyzer?analyzer?=?new?ChineseAnalyzer();
Reader?r?=?new?StringReader(testString);
TokenFilter?tf?=?(TokenFilter)?analyzer.tokenStream("",?r);
System.err.println("=====chinese?analyzer====");
Token?t;
while?((t?=?tf.next())?!=?null)?{
System.out.println(t.termText());
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
public?static?String?transJe(String?testString,?String?c1,?String?c2)?{
String?result?=?"";
try?{
Analyzer?analyzer?=?new?MIK_CAnalyzer();
Reader?r?=?new?StringReader(testString);
TokenStream?ts?=?(TokenStream)?analyzer.tokenStream("",?r);
Token?t;
while?((t?=?ts.next())?!=?null)?{
result?+=?t.termText()?+?",";
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
return?result;
}
public?static?void?main(String[]?args)?{
try?{
String?testString?=?"中文分詞的方法其實(shí)不局限于中文應(yīng)用,也被應(yīng)用到英文處理,如手寫識別,單詞之間的空格就很清楚,中文分詞方法可以幫助判別英文單詞的邊界";
System.out.println("測試的語句????"+testString);
String?sResult[]?=?transJe(testString,?"gb2312",?"utf-8").split(",");
for?(int?i?=?0;?i??sResult.length;?i++)?{
System.out.println(sResult[i]);
}
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}
jar包??
lucene-analyzers-2.4.1.jar
lucene-core-2.4.1.jar
IKAnalyzer2.0.2OBF.jar
如果你的分詞規(guī)則是在一個(gè)字符串的開頭和結(jié)尾加上"_",然后兩個(gè)字符一分的話,代碼可以這樣寫:
import java.util.ArrayList;
import java.util.List;
public class Participle
{
private static final String HEAD_END_STR = "_";
private static final int PARTICIPLE_LENGTH = 2;
public static void main(String[] args)
{
String exampleWord = "計(jì)算機(jī)";
exampleWord = "_" + exampleWord + "_";
int length = exampleWord.length();
ListString result = new ArrayListString();
for (int i = 0; i length - 1; i++)
{
String str = exampleWord.substring(i, i + PARTICIPLE_LENGTH);
result.add(str);
}
System.out.println(result);
}
}
輸出結(jié)果:_計(jì), 計(jì)算, 算機(jī), 機(jī)_