可能大家都碰到過類似的問題 比如 “我國信息化工程發展迅速。”這句話中,出現了信息化 和 化工嵌套的關鍵詞,那么在加鏈接的時候如何處理?當然不可能兩個都加,只能加一個的情況下,只能通過給文檔定義類型,根據類型進行關鍵詞的類型指派。我這里實現了根據關鍵詞的順序進行替換,誰早先換誰。呵呵
關鍵詞實體
public class mainkey {
private String name = "";
private String url = "";
public mainkey(String temp_name ,String temp_url) {
name = temp_name;
url = temp_url;
}
public void setName(String temp_name)
{
name = temp_name;
}
//
public String getName()
{
return name;
}
public void setUrl(String temp_url)
{
url = temp_url;
}
public String getUrl()
{
return url;
}
}
內容位置匹配
public class station {
private int starti;
private int endi;
private int length;
private mainkey key;
private int typei;
public station(int starti,int endi,int length,mainkey key) {
this.starti = starti;
this.endi = endi;
this.length = length;
this.key = key;
this.typei = 1;
}
public void setStarti(int temp)
{
starti = temp;
}
public int getStarti()
{
return starti;
}
public void setEndi(int temp)
{
endi = temp;
}
public int getEndi()
{
return endi;
}
public void setLength(int temp)
{
length = temp;
}
public int getLength()
{
return length;
}
public void setKey(mainkey key)
{
this.key = key;
}
public mainkey getKey()
{
return key;
}
public void setTypei(int temp)
{
typei = temp;
}
public int getTypei()
{
return typei;
}
}
具體替換
public class change {
public change() {
}
public static void main(String args[])
{
change ch = new change();
System.out.println(ch.changeStr("我國信息化工程發展迅速,電子化程度很高,國家大力提倡信息化。"));
}
public String changeStr(String cs)
{
//key
java.util.ArrayList keylist = new java.util.ArrayList();
keylist.add(new mainkey("電子","dianzi"));
keylist.add(new mainkey("信息化","xinxihua"));
keylist.add(new mainkey("國家","guojia"));
keylist.add(new mainkey("化工","huagong"));
//station
java.util.ArrayList stationlist = new java.util.ArrayList();
int keyi = 0;
for (int i=0;i<keylist.size();i++)
{
mainkey tempkey = (mainkey)keylist.get(i);
int length = tempkey.getName().length();
int starti = cs.indexOf(tempkey.getName());
int endi = starti+length-1;
station tempstation = null;
if (starti >0)
{
tempstation = new station(starti,endi,length,tempkey);
stationlist.add(tempstation);
}
}
//change
this.BubbleSort(stationlist);
//開始比較
for (int i=0;i<stationlist.size()-1;i++)
{
if ((((station)stationlist.get(i)).getStarti())<=(((station)stationlist.get(i+1)).getEndi()))
{
((station)stationlist.get(i)).setTypei(0);
}
}
//
//開始替換
for (int i=0;i<stationlist.size();i++)
{
station ss = ((station)stationlist.get(i));
if (ss.getTypei() == 1)
{
mainkey key = ss.getKey();
cs = cs.replaceAll(key.getName(),"<"+key.getUrl()+">"+key.getName()+"</"+key.getUrl()+">");
}
}
return cs;
}
void BubbleSort(java.util.ArrayList changelist)
{ //R(l..n)是待排序的文件,采用自下向上掃描,對R做冒泡排序
int i,j;
int n = changelist.size()-1;
boolean exchange; //交換標志
for(i=0;i<n;i++){ //最多做n-1趟排序
exchange=false; //本趟排序開始前,交換標志應為假
for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描
if(((station)changelist.get(j+1)).getStarti()>((station)changelist.get(j)).getStarti()){//交換記錄
Object tempstation = changelist.get(j+1);
changelist.set(j+1,changelist.get(j));
changelist.set(j,tempstation);
exchange=true; //發生了交換,故將交換標志置為真
}
if(!exchange) //本趟排序未發生交換,提前終止算法
return;
} //endfor(外循環)
}
}