public Set<String> matchChinese(String text,Set<String> dictionary,int maxLength) {
//text:待匹配文本 dictiona:词典 maxLength:词典中最长词长度
Set<String> result=new HashSet<>();
while(text.length()>0) {
int length=maxLength;
if(text.length()<maxLength)
length=text.length();
//取指定的最大长度的文本去词典里面匹配
String s=text.substring(0,0+length);
while(!dictionary.contains(s)){
//如果长度为一且在词典中未找到匹配
if(s.length()==1)
break;
//如果匹配不到,则长度减一继续匹配
s=s.substring(0,s.length()-1);
}
if(s.length()==1){
if (dictionary.contains(s))
result.add(s);
}else{
result.add(s);
}
//从待查找文本中去除已经匹配的文本
text=text.substring(s.length());
}
return result;
}
测试方法
public static void main(String[] args) {
Set<String> dictionary=new HashSet<>();
dictionary.add("桃树");
dictionary.add("杏树");
dictionary.add("树");
dictionary.add("飞来飞去");
dictionary.add("仿佛已经满是桃儿");
Scanner scanner=new Scanner(System.in);
newtest n=new newtest();
while(scanner.hasNext()){
String text=scanner.next();
Set<String> result=n.matchChinese(text,dictionary,8);
for(String s:result){
System.out.println(s);
}
}
测试文本:
桃树,杏树,梨树,你不让我,我不让你,都开满了花赶趟儿。红的像火,粉的像霞,白的像雪。花里带着甜味;闭了眼,树上仿佛已经满是桃儿,杏儿,梨儿。花下成千成百的蜜蜂嗡嗡的闹着,大小的蝴蝶飞来飞去。野花遍地是:杂样儿,有名字的,没名字的,散在草丛里像眼睛像星星,还眨呀眨