自己写的逻辑写了半天没有搞定
回来翻了一下java里面正则表达式相关的东西
要是能用Matcher和Regex那真是太简单了
题目:
字符串匹配问题,给定一串字符串,按照指定规则对齐进行匹配,并将匹配结果保存至output数组中,多个匹配项用空格间隔,最后一个不需要空格。
要求
1、匹配规则中包含通配符?和*。?表示匹配任意一个字符,*表示匹配任意多个字符串。
2、匹配规则要求匹配最大的字符子串,例如abbdd,规则a*d,匹配abbdd而非abbd,即最大匹配子串。
3、匹配后的输入串不再进行匹配,从当前匹配后的字符串开始重新匹配其它字符串。
要求实现函数my_find(char input[],char rule[],char output[])
例子:
input:abcadefg
rule:a?c
output:abc
input:newsadfanewfdadsf
rule:new
output:new new
intput:breakfastf ood
rule:f*d
output:fast food
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test2 {
public static void main(String[] args) {
Test2 test = new Test2();
System.out.println(test.my_find("abbdd", "a*d"));
}
public String my_find(String input,String rule){
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer();
for(int i=0;i<rule.length();i++){
char c = rule.charAt(i);
if(c=='*')
sb.append("[\\w\\W]*");
else if(c=='?')
sb.append("[\\w\\W]");
else
sb.append(c);
}
//System.out.println();
Pattern p = Pattern.compile(sb.toString());
Matcher matcher = p.matcher(input);
while(matcher.find()){
sb1.append(matcher.group()+" ");
}
if(sb1.length()>0)
sb1.deleteCharAt(sb1.length()-1);
return sb1.toString();
}
}