题目:
请实现一个函数用来匹配包括’.‘和’'的正则表达式。模式中的字符.表示任意一个字符,而表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。
思路:
准备:str1(“aaa”),str2(“a.a”)或者(“abaca”),将str2转化为ch2数组
1.首先:遍历ch2数组,查看其每个字符元素如果,元素 == str1的第一个元素,则,str1、str2各自将头元素删除 如果,元素 == '.' ,则,str1、str2各自将头元素删除 如果,元素 =='*' ,则将str1的前两个元素删除
注意!!!str的删除即取子串的形式,即str = str.subString()这种形式
如果最后,str1、str2都没元素了,则说明都匹配上了,全部删除了
public class Main19
{
private static boolean region(String s1, String s2)
{
if (s1.length() > s2.length() || s1 == null || s1.length() == 0
|| s2.length() == 0 || s2 == null)return false;
char[] ch2 = s2.toCharArray();
for (int i = 0; i < ch2.length; i++)
{
if (ch2[i] == s1.charAt(0))//只和新的str1的一个元素比较
{
s1 = s1.substring(1);
s2 = s2.substring(1);
}
if (".".equals(String.valueOf(ch2[i])))
{
s1 = s1.substring(1);
s2 = s2.substring(1);
}
if ("*".equals(String.valueOf(ch2[i])))
{
s2 = s2.substring(2);
}
}
if (s1.length() == 0 && s2.length() == 0)
return true;
return false;
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
System.out.println(region(s1, s2));
}
}