public class DigitMap
{
public String getDigitMapResult(String sdm, String destString){
int startparenthesis = sdm.indexOf("(");
int endparenthesis = sdm.indexOf(")");
String sdms = sdm.substring(startparenthesis+1, endparenthesis);
String[] sArr = sdms.split("\\|");
char[] tb = destString.toCharArray();
int tblength = tb.length;
int matchCountPM = 0;
int matchCountUM = 0;
for (String string : sArr)
{
char[] carr = string.toCharArray();
int clength = carr.length;
int i,j;
char[] preChar = new char[2];
for(i = 0, j = 0; i < clength && j<tblength; i++,j++){
if((carr[i]>='0'&&carr[i]<='9')||(carr[i]>='A'&&carr[i]<='K')){
preChar[0] = preChar[1] = carr[i];
if(!check(carr[i],tb[j])){
break;
}
}else if (carr[i]=='[') {
preChar[0] = carr[i+1];
preChar[1] = carr[i+3];
if(!check(carr[i+1], carr[i+3],tb[j])){
break;
}
i+=4;
}else if (carr[i]=='x') {
preChar[0] = '0';
preChar[1] = '9';
if(!isDigit(tb[j])){
break;
}
}else if (carr[i]=='.') {
if(!check(preChar[0], preChar[1], tb[j])){
break;
}
}else {
break;
}
}
if(j==tblength){
if(clength!=j){
matchCountPM++;
}else if (clength==j) {
matchCountUM++;
}
}else if (i==clength && j < tblength) {
matchCountPM++;
}
}
if((matchCountPM+matchCountUM)>1){
return("{\""+destString+"\",\"FM\"}");
}else if (matchCountUM==1) {
return("{\""+destString+"\",\"UM\"}");
}else if (matchCountPM==1) {
return("{\""+destString+"\",\"PM\"}");
}else{
return("有错");
}
}
//是否是数字
private boolean isDigit(char c)
{
return (c>='0'&&c<='9')?true:false;
}
//后者介于前两者之间
private boolean check(char c, char d, char e)
{
return (e>=c&&e<=d)?true:false;
}
//两个字符是否相等
private boolean check(char c, char d)
{
return c==d;
}
public static void main(String[] args)
{
DigitMap dm = new DigitMap();
String sdm = "{ (0|00|[1-7]xxx|8xxx|8xxxxxxx|Fxxxxxxx|Exx|91xxxxxxxxxx|9011x.)}";
System.out.println(dm.getDigitMapResult(sdm,"8234"));
}