黑马程序员——JDK5特性、正则 笔记第十二篇

JDK5 新特征、正则笔记

------- android培训java培训、期待与您交流! ---------

JDK5特性

1静态导入

适用范围:仅对于一个类的静态成员变量或者静态方法起作用。

注意事项:如果静态导入的成员与本类的成员同名,那么优先调用本类的成员。(就近原则)

 

格式:import static 包名.类名.静态成员

例如:import static java.util.Collections.sort;

 

2增强for循环

增强for循环只能用在数组、或实现Iterable接口的集合类上

格式:

for(变量类型 变量 :需迭代的数组或集合){}

 

增强for循环需注意细节:

1.增强for循环再遍历集合的过程中也不能使用集合对象改变集合的元素个数。因为增强for循环内部还是使用了迭代器的。

    2.增强for 循环与普通迭代器遍历的区别在于:增强for循环只能用于遍历元素,不能增删集合中的元素,而普通迭代器方式可以

    3.增强for 循环与普通for循环区别:增强for 循环的使用一定要有遍历的目标对象,而普通的可以没有。

    4.增强for循环用于Map对象,遍历Map的时候不能直接遍历,因为Map接口没有实现Iterable接口。

HashMap<String, String> map = new HashMap<String, String>();

       map.put("001","狗娃");

       map.put("002","狗剩");

       map.put("003","狗蛋");

       Set<Map.Entry<String, String>> entryes = map.entrySet();(第4

       for(Map.Entry<String, String> item : entryes){

           System.out.print(item+",");

       }

 

3可变参数

格式

for(  数据类型...  )

可变参数的细节

声明:

       在一个方法中,最多只能有一个可变参数。

       可变参数只能放在参数列表的最后面。

    调用:

       当使用可变参数时,可以传0或多个参数。

       当使用可变参数时,也可以传一个数组进去,就表示多个参数。

    使用:

       在方法内部使用时,就是在使用一个数组。

       当调用时没有传参数时(传了0个),这时在方法内部的参数数组是有值的(不为null),但长度为0.

 

public class Demo4 {

   

    public static void main(String[] args) {

       //int[] arr = {12,3,5,1};

       //System.out.println(arr);  // [I@1db05b2

       add(1,2,12);

    }

   

    public static  void add(int a,int... arr){ 

       int sum = 0;

       for(int item : arr){

           sum += item;

       }

       System.out.println("总和:"+ sum);

    }

}

 

4自动装箱/拆箱

自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。

自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。

基本数据类型(四型八种)

包装数据类型

byte

Byte

short

Short

int

Int

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

5枚举类

注意事项:

         1.枚举值默认的修饰符为 public  static  final.

         2.枚举值的数据类型就是枚举值所属的枚举类的类型.

         3.枚举值实际上指向了枚举类的对象.

         4.枚举类是存在构造函数的,而且使用了private修饰的.

         5.枚举类是可以定义成员变量和成员函数的.

         6.枚举类的枚举值必须位于该类的第一个语句.

         7.枚举类是可以定义抽象方法的,如果一个枚举类出现了抽象方法,那么写枚举值的时候就必须实现枚举类的方法.

 

枚举类也可以实现接口(序列化)、或继承抽象类。

JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型(enum)。

 

//季节枚举类

enum Season{

    SPRING,SUMMER,AUTUMN,WINTER;

}

 

enum Direction{

    UP,DOWN;

}

 

public class Demo8 {

    public static void main(String[] args) {

       Season season = Season.WINTER;

       switch(season){ //如果写上了枚举类的类名,担心你传入其他的枚举类型。

           case SPRING:

                  System.out.println("春天..");

                  break;

           case SUMMER:

              System.out.println("夏天..");

              break;

           case AUTUMN:

              System.out.println("秋天..");

              break;

           case WINTER:

              System.out.println("冬天..");

              break;       

       }

    }

}

 

路径:

路径分割符:在Windows中分隔符为'\',在Unix/Linux中分隔符为'/'。

 

路劲问题:

绝对路径:绝对路径就是路径的信息是以一个盘符开头的路径。(资源的一个完整路径信息)相对路径:相对路径就是资源文件相对于当前程序所在的路径。

 .  当前路径

.. 上一级目录

 

 

正则

    预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w] */

注意: 一个预定义字符只能匹配一个字符,只有加上了数量词之后才可以匹配多个字符。

       System.out.println(".是匹配任意字符:"+ ("#".matches(".")));  //任意字符

       System.out.println("\\d是匹配数字:"+ ("a".matches("\\d")));

       System.out.println("\\D是匹配非数字:"+ ("^".matches("\\D")));

       System.out.println("\\s是匹配空白字符:"+ ("\n".matches("\\s")));

       System.out.println("\\S是匹配非空白字符:"+ ("a".matches("\\S")));

      

       System.out.println("\\w是匹配单词字符:"+ ("$".matches("\\w")));

      

       System.out.println("\\w是匹配非单词字符:"+ ("a".matches("\\W")));

 

      

数量词

           ? X,一次或一次也没有

           X* X,零次或多次

           X+ X,一次或多次

           X{n} X,恰好 n

           X{n,} X,至少 n

           X{n,m} X,至少 n 次,但是不超过 m

      

       System.out.println("".matches("\\d?")); //表示数字可能出现一次,或者一次也不出现

       System.out.println("a".matches("\\d*")); //零次或多次

       System.out.println("1".matches("\\d+")); //至少要出现一次

      

       System.out.println("123".matches("\\d{3}")); //恰好 n

      

       System.out.println("112345678903".matches("\\d{3,}")); //至少出现三次

      

       System.out.println("123455".matches("\\d{3,5}"));  // 至少 3 次,但是不超过 5

 

 

范围词

           [abc] ab c(简单类)

           [^abc] 任何字符,除了 ab c(否定)

           [a-zA-Z] a z A Z,两头的字母包括在内(范围)

      

注意:范围词里面的内容即是再长也只能匹配一个字符,如果需要匹配多个字符,那么需要加上数量词

       System.out.println("e".matches("[abc]"));    

       System.out.println("e".matches("[^abc]"));  // ^ 出现在范围词中表示的是""的意思   

       System.out.println("^".matches("[a-zA-Z0-9_$]")); // 出现的字符是a-z范围之内的。

 

正则表达式查找:        

                                                       

         如果需要查找字符串的内容需要使用到正则的对象:

                            Pattern(正则类)

                            Matcher(匹配器)

 

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。

执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

 

因此,典型的调用顺序是

          Pattern p =Pattern.compile("a*b");  先把字符串的正则编译成一个正则对象。。

          Matcher m =p.matcher("aaaaab");  // 使用正则对象匹配一个字符串,然后就产生了一个Matcher对象。

          boolean b = m.matches();  //

 

匹配要使用的方法:

         find()通知匹配去找适合的内容,如果找到,那么返回true,找不到适合的内容返回false.

         group()  获取匹配器找到的内容

 

\b 单词边界单词边界匹配器只代表了单词 的边界,不匹配任何一个字符。

 

 

public class Demo4 {

   

    //需求:找出三个字符串组成的单词给我。

    public static void main(String[] args) {

       String data = "da jia jin tian hao hao zuo xiang mu";

       String reg = "\\b[a-z]{3}\\b"; //  \\b为边界匹配器

       //正则对象

       Pattern p = Pattern.compile(reg);

       //使用正则对象匹配字符串,生成一个匹配器

       Matcher m = p.matcher(data);

      

       while(m.find()){

           System.out.println(m.group());

       }

    }

}

 

public class Demo6 {

   

    public static void main(String[] args) {

       String data = "有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com 有事没事联系:1122423@qq.com.cn "

              + "有事没事联:1122423@qq.com.cn 有事没事联系:1122423@163.hhh 有事没事联系:1122423@qq.net ";

      

       // 1122423 @qq.com  首位英文数字    其他位:\\w @

       //String reg = "[a-zA-Z0-9]\\w{3,15}@[a-zA-Z0-9]{2,22}(\\.[a-z]{2,3}){1,2}";

      

       String reg = "[a-zA-Z0-9]\\w{3,15}@[a-zA-Z0-9]{2,22}(\\.(net|com|cn)){1,2}";

       Pattern pattern = Pattern.compile(reg);

       Matcher m = pattern.matcher(data);

       while(m.find()){

           System.out.println(m.group());

       }            

       //System.out.println("net".matches("(net)|(com)|(cn)"));

      

    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值