请问如何编写一个java程序来判断字符串类型是否匹配啊?
如"a*"代表以字符a开头的字符串,"A??"代表以字符A开头长度为三的字符串.
这是一个很简单的问题,可我是一个刚刚接触JAVA的学生,感觉上述问题很复杂,要分析很多种情况.如字符串"as?ds*dert*sdl?rf*ad?jf"(*代表零个或多个字符).我已经试过好几次了,还是分析不清楚啊!希望高手们能帮我一下.谢谢啊!!!!

解决方案 »

  1.   

    startsWith
    public boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始。 参数:
    prefix - 前缀。 
    返回:
    如果该参数表示的字符序列是此字符串表示的字符序列的前缀,则为 true;否则为 false。还要注意,如果参数是空字符串,或者等于由 equals(Object) 方法确定的 String 对象,则返回 true。
    从以下版本开始: 
    1. 0 
      

  2.   

    JDK中已经解释的很清楚了,可以查看"java.lang.String",这里的方法很多,肯定能解决你的问题
      

  3.   

    如果字符串以*开头该如何呢?如"*asd?po",(*可以代表任何字符也可以代表多个字符).如"fguriasdkpo"就和它匹配啊.Sring类的很多方法我都试过了,简单的字符串我还是可以分析的.可是对于复杂的字符串如"
    as?ds*dert*sdl?rf*ad?j"我还是分析不出来啊?一点规律都没有啊.再请各位高手帮帮忙啊??多谢了
      

  4.   

    class myString{
     String string;
    //需要的其他方法及成员的定义
    //构造函数
    public Boolean isLike(String regex){...\}
    }
    new myString("abcd").isLike("a*") ->true
    new myString("ABCD").isLike("ABC*") ->true
    这就是原题啊,我真的很想知道复杂的字符串该如何分析啊
      

  5.   

    import java.util.regex.Pattern;public class Test {    public static void main(String[] args) {
            System.out.println(new MyString("as?ds....dert.....sdl?rf____ad?j").isLike("as?ds*dert*sdl?rf*ad?j"));
        }
    }class MyString {
        private String myString;    public MyString(String myString) {
            this.myString = myString;
        }    public boolean isLike(String regex){
            regex = Pattern.quote(regex);
            regex = regex.replace("*", "\\E.*\\Q").replace("?", "\\E.\\Q");
            return myString.matches(regex);
        }    
    }
      

  6.   

    上述的替换还得再优化一下,比如:a**?*?**?**a 之类就应优化为 a*a,正在修动ing
      

  7.   

    改好了 :)class MyString {
        private String myString;    public MyString(String myString) {
            this.myString = myString;
        }    public boolean isLike(String regex){
            regex = Pattern.quote(regex);        
            regex = regex.replaceAll("\\*[?*]*", "\\\\E.*\\\\Q")
                         .replace("?", "\\E.\\Q")
                         .replace("\\Q\\E", "");  // 这一行可以取消掉,会更快一些
             return myString.matches(regex);
        }
    }
      

  8.   

    嘻嘻!!!!您真厉害啊,太棒了!!!!我还没有接触过正则表达试,我现在正努力弄懂呢.ing,不要笑我哦.....
    呵呵,非常非常感谢您啊.捆扰我两天的问题终于解决了,心情很爽嘞.