首页 新闻 会员 周边 捐助

关于字符串匹配的问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-08-27 09:25

      有个模板数组A:string[] tenmNum=new string[]{"北京","上海","广州"}

       还有个上传文件名数组B: string[]  fileName; (格式可能为 “我爱北京.txt”,“我爱广州.txt”),这样"我爱北京.txt"元素在A中找到模板"北京",代表合格

现在我需要判断 数组B 中的所有filename都包含A中的任一元素 且一一对应,目前已判断出两个数组的元素个数一样,只要求B中每个元素在A中能找到对应的模板(包含关系)

 

   例如 B中是 "我爱北京.txt"和"我爱北广.txt" 和“我爱广州.txt”则不合格

        B中是 "我爱北京.txt"和"XX我爱上海广12贾斯丁.txt" 和“我爱广州.txt”则合格

 

求帮忙写个方法:

protect  string  juge(){

// if 不合格

  return  不合格

}

 TKS!   

风醉的主页 风醉 | 小虾三级 | 园豆:1197
提问于:2013-08-23 19:59
< >
分享
所有回答(4)
0

呵呵,我给个笨办法,大家后好的,继续:

protect string juge()

{
  var included = false; // 刚开始设置包含标识为false

  foreach(var f in fileName){ // 循环fileName
    foreach(var t in tenmNum){ // 循环tenmNum
      if(t.indexOf(t) >= 0){ // 取其中的一个fileName进行对比
        included = true; // 如果包含就设置include为true并跳出内部循环
        break;
      }
    }

    if(included == true){ // 如果包含标识为true就跳出外部循环
      break;
    }
  }

return included; // 返回包含标志
}

聆听的石头 | 园豆:210 (菜鸟二级) | 2013-08-23 21:08

谢谢回复,不过你这个方法貌似只要有一个符合就会跳出循环,不能全部都判断,你看能再改下嘛

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2013-08-23 23:39
1

public bool juge()
{
bool result = true;//默认不合格
string[] tenmNum={"北京","上海","广州"};
string[] fileName = { "北京.txt", "北京.txt", "北京.txt" };
foreach (var ten in tenmNum)
{
int count = 0;
foreach (var file in fileName)
{
if (file.Contains(ten))
{
count += 1;
if (count > 1) break;//大于1次后,就没有必要继续遍历下去
}
}
if (count>1)//出现两次以上,则代表不是一一对应,立即跳出循环
{
result = false;
break;
}
}
return result;
}

请及时采纳!谢谢!

海上将军 | 园豆:306 (菜鸟二级) | 2013-08-24 01:19
0

你的“一一对应”是指数据的下标也要匹配吗?

protect  string  juge(){
  string result="合格";
  for(int i=0;i<tenmNum.Length;i++){
    if(!fileName[i].Contains(tenmNUm[i])){
        result="不合格";
        break;
    }
  }     
}
幻天芒 | 园豆:37207 (高人七级) | 2013-08-24 17:30

那倒不用,下表对应的话,你这方法就OK了, 算法目的是为了 证明 存在,即模板规定的文件名在  上传时一定要都有,且上传的文件的文件名与模板文件名是包含关系 

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2013-08-26 09:41

@风醉飘: 下标不对应的话,两次循环即可~

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2013-08-26 10:58
0

  最后还是结合数据库查询解决了,以后类似问题也可以使用  lingq 去筛选

 1  string[] numbers = item_templa.attachment_title.Trim().Split('|');
 2 
 3                 foreach (var item in numbers)
 4                 {
 5                     string sqlatt = string.Format(" where task_no={0} and  filename_old like '%" + item + "%'", item_curtask.rec_no);
 6                     IList<workflow_attachment> wfAttach = workflow_attachmentHelper.Select(sqlatt);
 7                     if (wfAttach.Count > 0)
 8                     {
 9                         return "true";
10                     }
11                     else
12                     {
13 
14                         return "上传的附件没有完全包含模板规定!";
15                     }
16 
17 
18                 }
19                 return "true";
20             }
21             else {
22 
23                 return "true";
24             }
风醉 | 园豆:1197 (小虾三级) | 2013-08-27 09:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册