入门1+1版正向最大匹配法简单实现

废话不多说哦,直接上代码,算法太简单就不解释了,希望可以帮助初学者有个快速的初步认识。
public class MywordSeg {
/**
*
* @param intputStr
* @param map
* @return
*/
public String wordSeg(String intputStr,Map map) {
int strLen = intputStr.length();
int startPoint = 0;// 起始位置。
int endPoint = 0;// 结束位置。
int MaxLength = 12;// 匹配所去字符串的最大值
boolean isFind = false;// 判断是否是词库中的词的。
String word=null;
java.lang.StringBuffer retValSb=new StringBuffer();
while (startPoint < strLen) {
int N = startPoint + MaxLength < strLen ? startPoint + MaxLength : strLen;//所要取出的字符串或者是词组的大小
isFind = false;
// 正向最大匹配
for (endPoint = N; endPoint > startPoint+1; endPoint--) {
word = intputStr.substring(startPoint, endPoint);
if(map.get(word)!=null){
isFind=true;
startPoint=endPoint;
retValSb.append(word).append(",");
break;//跳出for循环
}
}

if(isFind==false){
word= intputStr.substring(startPoint, startPoint+1);
++startPoint;
}
}
return retValSb.toString();
}
public static void main(String[] arg){
MywordSeg seq=new MywordSeg();
//构建最简单的Map字典
Map map=new HashMap();
map.put("中文", 1);
map.put("aa", 1);
System.out.println(seq.wordSeg("11111",map));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值