java indexof 通配符,字符串与含有通配符‘*’的字符串匹配(非正则表达式)

顺利找到工作之后,每天勤勤恳恳的上班中...

项目需要搜索含有通配符的文件名的文件,*号表示任意多字符。这里应该只处理英文。

如此简单的要求,还是不要用正则表达式,一是简单,而是正则表达式感觉杀鸡用了牛刀了。

只含有*号的情况就简单的很了,*号匹配任意多字符,首先还是着眼于非*号的文字。

比如 :

abcdefg 匹配 a*d*g,这是个通用的匹配,它过了,也就都过了。

很显然,a应该在开头,g应该在结尾。两个函数StartWith和EndWith,就绝对的保证了开头和结尾。

中间,随便匹配一下,也就ok了,鉴于 a*c*e*g形式的存在,匹配还是应该按顺序来。而不是掐头去尾再搜索一下。

第一步,把a*c*e*g split数组 [a,c,e,g]

第二步,匹配第一个a,找到之后,将原字符串截掉a 的到bcdefg.

第三步, 匹配c 这里用IndexOf ,找到c的位置,把 c前面的都干掉 得到 defg

第四步,找到e的位置,同样干掉前面一节,得到fg。

这时候只剩下g一个匹配项目了,直接endwith即可。

中间任何一步匹配失败,则整体失败。

发个代码,小心了(代码害人):

private bool IsMatch(string src,stringpattern)

{string[] ps = pattern.Split('*');for(int i = 0; i < ps.Length; i++)

{if(i == 0)

{if(src.StartsWith(ps[i]))

{

src=src.Substring(ps[i].Length);

}

}else if (i == ps.Length-1)

{if(src.EndsWith(ps[i]))

{return true;

}

}else{int p =src.IndexOf(ps[i]);if (p == -1)

{return false;

}else{

src= src.Substring(p +ps[i].Length);

}

}

}return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值