package day04;public class StringDemo2 {
public static void main(String[] args) {
String w1 = "a";
String w2 = w1.replaceAll("\\d?","t");
String w3 = "7";
String w4 = w3.replaceAll("\\d?","t");
System.out.println(w2);
System.out.println(w4);
}

}输出结果是
tat
tt求大神解释的详细点!

解决方案 »

  1.   

    Java中\\d?拆分来看,第一个\转义不用管,在java中\d表示1~9任意字符串,变量后面有?标识他是贪婪模式,(贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,tat。非贪婪匹配:就是匹配到结果就好,就少的匹配字符。就如上面\d将7换为t,后面又加个t)
      

  2.   

    换一个例子说
    String w1 = "aaa";
            String w2 = w1.replaceAll("\\d?","t");
    tatatat?其实就是{0,},“空”也会被匹配上,比如两个a之间的“空”。
      

  3.   


    你这个解释的我还是不明白。能把tat 和 tt的每一个意义说下么?而且你说的两种匹配模式,这正则都一样咋就变两种匹配模式呢。
      

  4.   

    ?是{0,1} 把兄弟 ?两个a 之间的 "空" 这个"空"怎么解释失误,确实是{0,1}。你可以这么理解,虽然你看着是aa,但是计算机看的可能是1{0}a1{0}a1{0},我说的空指的就是1{0},它当然可以被\\d所匹配。        String w3 = "71";
            String w4 = w3.replaceAll("7{0}","t");
    t7t1t        String w3 = "71";
            String w4 = w3.replaceAll("7{0,1}","t");
    tt1t  少个t是因为7{0,1}会匹配1{0}7
      

  5.   

    public static void asd(){
    /**
     * 默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。
     * 如:String str="abcaxc";
          *Patter p="ab.*c";
               *贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab.*c)。
               *非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab.*c)。
     */
    System.out.println("a".replaceAll("\\?","t"));//a 非贪婪匹配,最小长度
    System.out.println("a".replaceAll("","t"));//tat  贪婪匹配,最大长度
    System.out.println("7".replaceAll("\\d?","t"));//tt 将连着的数字和空格一起转化,非贪婪匹配,最小长度
    System.out.println("7".replaceAll("\\?","t"));//7 非贪婪匹配,最小长度
    System.out.println("7".replaceAll("","t"));//t7t  贪婪匹配,最大长度
    System.out.println("7a".replaceAll("\\d","t"));//ta 将数字转化,贪婪匹配,最大长度
    }
      

  6.   

    replaceAll 其实就是匹配所有可能性, 这里的“\\d?”是正则表达式,而不是字串,\d表示数字,?表示{0,1},而把字符串“a” 转化为符合“\\d?”表达式要求的包含所有可能性最终结果是 “?a?”  。注:这里 ?a =a ,a?=a, ?a?=a;而数字其实也是这样 ?7 = 7,7?=7 ,不管7?还是?7 最后得到的正则表达式都是??。所以一个结果是 tat 一个是tt 。正则表达式和字符串是不同的,要替换字符串用replace 而不是replaceAll。
      

  7.   

    这里?{0,1}  0表示没有,1表示有1个。我可能说的不是很清楚,这里的问题主要是对正则表达式没理解的问题,请认真研究下正则表达式就会明白。还有就是这里的?都是非贪婪模式,有几位解释有错误。所以最后结果只存在 ?a? 而不会存在??a??的情况。其实7 你可以直接看成?号就可以了理解了。a因为不符合条件(条件是数字)无法用?来替换。