//用户输入消息
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() + "条记录");
}
}