基于字符串匹配的SMMO Demo

package com.fengwuj.SMMOTest;

//用户输入消息
public class MsgInfo {
private String AccessNO;
private String FeatureStr;

public MsgInfo() {}

public MsgInfo(String AccessNo,String FeatureStr) {
this.AccessNO = AccessNo;
this.FeatureStr = FeatureStr;
}

public String getAccessNO() {
return AccessNO;
}

public String getFeatureStr() {
return FeatureStr;
}

public void setAccessNO(String accessNO) {
AccessNO = accessNO;
}

public void setFeatureStr(String featureStr) {
FeatureStr = featureStr;
}

}

package com.fengwuj.SMMOTest;

//词典(匹配指令)
public class Model {
private int seq;
private String AccessNO;
private String FeatureStr;
private int ANCheckFlag;
private int FSCheckFlag;

public Model() {}

public Model(int seq,String AccessNO,String FeatureStr,int ANCheckFlag,int FSCheckFlag) {
this.AccessNO = AccessNO;
this.seq = seq;
this.ANCheckFlag = ANCheckFlag;
this.FSCheckFlag = FSCheckFlag;
this.FeatureStr = FeatureStr;
}




public String getAccessNO() {
return AccessNO;
}

public int getANCheckFlag() {
return ANCheckFlag;
}

public String getFeatureStr() {
return FeatureStr;
}


public int getFSCheckFlag() {
return FSCheckFlag;
}

public int getSeq() {
return seq;
}

public void setAccessNO(String accessNO) {
AccessNO = accessNO;
}

public void setANCheckFlag(int aNCheckFlag) {
ANCheckFlag = aNCheckFlag;
}

public void setFeatureStr(String featureStr) {
FeatureStr = featureStr;
}

public void setFSCheckFlag(int fSCheckFlag) {
FSCheckFlag = fSCheckFlag;
}

public void setSeq(int seq) {
this.seq = seq;
}
}


package com.fengwuj.SMMOTest;

import java.util.ArrayList;


//匹配算法
public class Utils {
public static Model match(ArrayList<Model> modelList,MsgInfo msgInfo) { //匹配算法
ArrayList<Model> resultList = new ArrayList();
ArrayList<Model> finaltList = new ArrayList();
Model resModel = null;

//匹配号码
for(Model model : modelList) {
if (model.getANCheckFlag() == 1) {
if (accMatch(msgInfo.getAccessNO(),model.getAccessNO())) {
resultList.add(model);
}
}else {
if(maxFuzzyMatch(msgInfo.getAccessNO(), model.getAccessNO())){
resultList.add(model);
}
}
}


//匹配内容
for(Model result : resultList) {
if (result.getFSCheckFlag() == 1) {
if (accMatch(msgInfo.getFeatureStr(), result.getFeatureStr())) {
finaltList.add(result);
}
}else {
if (maxFuzzyMatch(msgInfo.getFeatureStr(),result.getFeatureStr())) {
finaltList.add(result);
}
}
}

//获取结果,给定优先级,优先获取FSCheckFlag==1的对象,若结果集不满足条件,则获取模糊匹配的对象结果
int count = 0;
for(Model end : finaltList) {
if (end.getFSCheckFlag() == 1) {
resModel = end;
count++;
break;
}
}

if (count == 0) {
resModel = finaltList.get(0);
}

return resModel;
}

public static boolean accMatch(String input,String dict){
return input.equals(dict);
}

public static boolean maxFuzzyMatch(String input,String dict){
boolean isSuccessful = false;
while(input.length() >= dict.length()) {
if ("".equals(dict)) {
return true;
}
if (accMatch(input, dict)) {
isSuccessful = true;
}
input = input.substring(0,input.length()-1);
}

return isSuccessful;
}
}


package com.fengwuj.SMMOTest;

//主函数
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;


public class Main {


public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Model> modelList = new ArrayList();
Model[] models = new Model[5];
models[0] = new Model(1,"10628888","xw",1,0);
models[1] = new Model(2,"1062888801","xw",0,0);
models[2] = new Model(3,"1062888801","xw1",0,1);
models[3] = new Model(4,"10628888","01xw",1,1);
models[4] = new Model(5,"10628888","",0,0);
for(int i = 0; i < models.length; i++) {
modelList.add(models[i]);
}

Scanner scanner = new Scanner(System.in);
String number = scanner.next();
String content = scanner.next();

MsgInfo myInfo = new MsgInfo(number,content);
Model mo = Utils.match(modelList, myInfo);
System.out.println("匹配到第" + mo.getSeq() + "条记录");
}
}



发布了46 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fengwuJ/article/details/80712598