正则表达式/Calendar/集合/迭代器

一:二分查找:

(1)   前提条件:数组必须是有序的,(已经是一个排好序的数组)

(2)   思想:猜想中间索引,这样可以将数组减半

二:选择排序:从0索引开始,依次与后面的每个索引处的值进行比较,每次比较后,较小的数放在前面.第一轮比较完成后,最小值出现在了最小索引处.

#选择排序与二分查找的综合应用:

packageBinaryDemo_01;

/**

 * 先初始化一个无序数组,然后只用选择排序将其由小到大排序,之后再进行二分法查找(二分法查找只能是针对已经排好序的数组)

 * */

public class BinaryDemo01 {

    public static void main(String[] args) {

        int []array={23,9,45,11,42,18};

        SortArray(array);

        System.out.println("排序后的数组为:");

         PrintArray(array);

         int indexof=BinarySerach(array,18);

         System.out.println("最后获取该元素的索引:" + indexof);

    }

    public static void SortArray(int []ar){//冒泡法将数组进行排序

        for(int i=0;i<ar.length-1;i++){

            for(int j=i+1;j<ar.length;j++){

                if(ar[i]>ar[j]){

                   int temp=ar[j];

                   ar[j]=ar[i];

                   ar[i]=temp;

                }

            }

        }

    }

    public static void PrintArray(int []ar2){

        System.out.print("[");

        for(int i=0;i<ar2.length;i++){

            if(i==ar2.length-1){

                System.out.println(ar2[i] + "]");

            }

            else{

                System.out.print(ar2[i] + ",");

            }

        }

    }

    public static int BinarySerach(int []ar3,int value){

        int begain=0;

        int end=ar3.length-1;

        int middle=(begain+end)/2;

        while(ar3[middle] != value){

            if(ar3[middle]<value){//实际传入的值大于中间索引处的值,begain1

                begain +=1;

            }

            else if(ar3[middle]>value){//实际传入的值小于中间索引处的值,end1

                end -=1;

            }

            else if(begain>end){//如果没有找到该元素,则返回-1

                return -1;

            }

            middle=(begain+end)/2;//再次获得中间位置处的索引

        }

        return middle;

    }

}


二:Arrays类:

(1)   此类包含用来操作数组(比如排序和搜索)的各种方法(针对数组操作的工具类)

(2)   常用的几个方法:

public static String toString(int[] a):将任意类型的数组以字符串形式显示出来!

public static void sort(int[] a):快速排序:(将给定数组中元素升序排序)

         publicstatic int binarySearch(int[] a, int key):当前int数组一定是有序数组, 使用二分搜索法来搜索指定的int 型数组,以获得指定的值

(3)   将其他类型转换为String类型的三种方法:

1.     String类的toString()方法

2.     String类的valueof()方法

3.     String类的有参构造:String  Str=new String(int[]arr/char[]chr/short[]shr)参数可以是任意类型

#对字符串中的字母进行排序:

packageArraysSortDemo;

import java.util.Arrays;

importjava.util.Scanner;

public class DemoSort {

    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);

        System.out.println("请输入一个字符串:");

        String Str=sc.nextLine();

        char []ch=Str.toCharArray();

        Arrays.sort(ch);//将字符串转换为字节型数组

        String Str1=String.valueOf(ch);//调用StringValueof()方法,该方法是静态的,因此需要用String类名调用,返回一个String类型

        System.out.println("排序后的字符串为:" + Str1);

    }

}


三: BigDecimal类

(1)  对于浮点类型的数据类说,他们存储和整数的存储是不一致的,是按照有效数字位来进行存储的,浮点类型的数据计算的时候容易损失精度,计算出来的结果不精确,Java针对这种情况:提供了这个.public BigDecimal(String val);

作用: 作用:来提供浮点类型数据的精确计算!可变的、任意精度的有符号十进制数

(2)         publicBigDecimal add(BigDecimal augend):加

 *          publicBigDecimal subtract(BigDecimal subtrahend):减

 *          publicBigDecimal multiply(BigDecimal multiplicand):乘法

 *          publicBigDecimal divide(BigDecimal divisor):除

 *          publicBigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

# BigDecimal类的运算:

packageBigDecimalDemo_01;

importjava.math.BigDecimal;

public class BigDecimalText_01 {

    public static void main(String[] args) {

        BigDecimal bd1=new BigDecimal("2.2246");

        BigDecimal bd2=new BigDecimal("0.5362");

       

        System.out.println("add:" + bd1.add(bd2));//public BigDecimal add(BigDecimal augend):

        System.out.println("sub:" + bd1.subtract(bd2));//public BigDecimalsubtract(BigDecimal subtrahend):

        System.out.println("mul:" + bd1.multiply(bd2));//public BigDecimalmultiply(BigDecimal multiplicand):乘法

        System.out.println("div:" + bd1.divide(bd2));//public BigDecimal divide(BigDecimaldivisor):

        System.out.println("div:" + bd1.divide(bd2, 0, 0));//public BigDecimaldivide(BigDecimal divisor(),int scale(保留几位小数),int roundingMode(舍入的一种模式:ROUND_HALF_UP))

    }

}


四: BigInteger

(1)   BigInteger:用来计算超出了Integer类型范围的数据

(2)   BigInteger的构造方法: publicBigInteger(String val)将字符串表示的数字封装成BigInteger类型

(3)   成员方法

public BigInteger add(BigInteger val)

public BigInteger subtract(BigInteger val)

public BigInteger multiply(BigInteger val)

public BigInteger divide(BigInteger val)

public BigInteger[] divideAndRemainder(BigInteger val) 返回一个BigInteger数组,数组中的元素:商,余数

# BigInteger类的运算:

packageBigIntegerDemo_01;

importjava.math.BigInteger;

public class BigIntegerText_01 {

    public static void main(String[] args) {

        BigInteger bg1=new BigInteger("520");

        BigInteger bg2=new BigInteger("20");

       

        System.out.println("add:" + bg1.add(bg2));//public BigInteger add(BigInteger val):

        System.out.println("sub:" + bg1.subtract(bg2));//public BigIntegersubtract(BigInteger val):

        System.out.println("mul:" + bg1.multiply(bg2));//public BigIntegermultiply(BigInteger val):

        System.out.println("div:" + bg1.divide(bg2));//public BigInteger divide(BigInteger val):

        System.out.println("div[]:" + bg1.divideAndRemainder(bg2));//public BigInteger[]divideAndRemainder(BigInteger val)返回一个BigInteger数组,数组中的元素:,余数

    }

 

}


五: Calendar

(1)   Calendar该类是一个抽象类:不能实例化的,所以通过一下这个方法来创建对象:

public static Calendar getInstance()例: Calendarcalendar = Calendar.getInstance();

(2)   Calendar常用的方法:

public int get(int field)返回给定日历字段的值

public static final int YEAR:表示日历中 的年

public static final int MONTH:月份:是0开始计算的

public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天

public abstract void add(int field,int amount) 为给定的日历的字段添加或者减去时间偏移量

public final void set(int year,int month,int date) 设置日历字段 YEAR、MONTH 和DAY_OF_MONTH 的值

#Calendar类的成员方法综合应用:

packageCalendarDemo_01;

importjava.util.Calendar;

public class CalendarText_02 {

    public static void main(String[] args) {

        Calendar Cl2=Calendar.getInstance();

        Cl2.set(2020, 4, 20);//调用public final void set(intyear, int month, int date)

       

        int year=Cl2.get(Calendar.YEAR);

        int month=Cl2.get(Calendar.MONTH);

        int date=Cl2.get(Calendar.DAY_OF_MONTH);

        System.out.println("当前系统的时间为:" + year + "" + (month+1) + "" + date + "");

        System.out.println("-------------");

       Cl2.add(Calendar.YEAR, -5);//调用public abstract void add(int field,intamount)方法

        year=Cl2.get(Calendar.YEAR);

        month=Cl2.get(Calendar.MONTH);

        date=Cl2.get(Calendar.DAY_OF_MONTH);

        System.out.println("修改后的日期为:" +year + "" + (month+1) + "" + date + "");

    }

 

}


#计算任意一年中二月有多少天:

packageCalendarDemo_01;

importjava.util.Calendar;

importjava.util.Scanner;

public class CalendarText3 {

    public static void main(String[] args) {

        Scanner Sc=new Scanner(System.in);

        System.out.println("请输入任意一个年份:");

        int year=Sc.nextInt();

        Calendar Cl3=Calendar.getInstance();//创建Calendar的对象

        Cl3.set(year, 2, 1);//调用Calendar类的public final void set(intyear, int month, int date)

        Cl3.add(Calendar.DAY_OF_MONTH, -1);//调用Calendar类的public abstract void add(int field,intamount)方法

        int date=Cl3.get(Calendar.DAY_OF_MONTH);

        System.out.println("任意一年的二月有:" + date + "");

    }

}

 

六:Date类与Calendar类:

(1)    日期类:表示特定的瞬间,精确到毫秒。

(2)    常用的构造方法:

public Date():表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间

public Date(long date):指定一个时间毫秒值  和它1970-1-1 00:00:00有时间差

(3)    Date中的两个成员方法

public long getTime():获取当前时间毫秒值(如果知道Date对象,可以通过getTime()获取时间毫秒值)

public void setTime(long time)

(4)    date对象与String类的日期文本格式相互转换

1.     格式化:将Date对象--->String类型的日期的"文本格式"

public final String format(Date date)

2.     解析:String类型日期的"文本格式"---->Date日期对象

public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)

      #要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化,但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化: SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类

 

注意事项:一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!

#格式化与解析的综合应用:

packageDateDemo_01;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

public class dateText_01 {

    public static void main(String[] args) throws ParseException {

        //以下是文本格式化操作

        Date dt=new Date();

        System.out.println("Date类时间为:" + dt);

        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

        String DateStr=sdf.format(dt);

        System.out.println("String类型的时间为:" + DateStr);

        System.out.println("----------");

        //以下是解析操作

       

        String DateStr1="2020-5-20";

        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");

        Date date1=sdf1.parse(DateStr1);

        System.out.println("将文本格式解析之后为:" + date1);

    }

}


#计算你一共来到这个世界多少天:

packageCalendarDemo_01;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjava.util.Scanner;

 

public class BirthDemo {

    public static void main(String[] args) throws ParseException {

        Scanner Sc=new Scanner(System.in);

        System.out.println("请输入您的出生年月:");

        String Str=Sc.nextLine();

        SimpleDateFormat Sdf=new SimpleDateFormat("yyyy-MM-dd");//创建SimpleDateFormat对象,并指定与输入的日期模式一样

        Date dt1=Sdf.parse(Str);//解析;String类型字符串转换为Date类型

        long time1=dt1.getTime();//调用Date了的get()方法,将出生日期转换为毫秒值

        long time2=System.currentTimeMillis();//获取系统当前的毫秒值

        long day=(time2-time1)/1000/60/60/24;//计算出天数

        System.out.println("您一共在这个世界上生存了:" + day + "");

    }

}

 

 

七:Math类:

(1)    常用的数学成员方法:

public static int abs(int a):绝对值

public static double ceil(double a):向上取整

public static double floor(double a):向下取整

public static double max(double a,double b):获取最大值

public static double min(double a,double b):获取最小值

public static double pow(double a,double b):a的b次幂

public static double random():取值范围:[0.0,1.0)

public static long round(double a):四舍五入

public static double sqrt(double a):一个数的正平方跟

(2)    静态导入:JDK5.0以后的新特性

例:import static java.lang.Math.abs;或者import staticjava.lang.Math.*就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。 

好处:可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。

#Math类方法综合应用:

packageMathDemo_01;

import static java.lang.Math.*;

public class MathDemoText_01 {

    public static void main(String[] args) {

        System.out.println("求绝对值:" + abs(-12));//调用了Math类的abs()方法,public static int abs(inta):绝对值

        System.out.println("对一个数向上取整:" + ceil(12.035));//调用了Math类的public static double ceil(doublea):向上取整

        System.out.println( "对一个数向下取整:" + floor(12.360));//调用了Math类的public static double floor(doublea):向下取整 

        System.out.println("求两个数中的最大值:" + max(9.23,8694));//调用Math类的public static double max(doublea,double b):获取最大值

        System.out.println("求两个数中的最小值:" + min(12.06,12.002));//调用Math类的public static double min(doublea,double b):获取最小值

        System.out.println("求一个数的幂次方:" + pow(2,3));//调用了Math类的public static double pow(doublea,double b):ab次幂

        System.out.println("产生一个伪随机数: " + random());//调用了Math类的public static double random():取值范围:[0.0,1.0)

        System.out.println("对一个数进行四舍五入:" + round(12.536));//调用了Math类的public static long round(doublea):四舍五入

        System.out.println("求一个数的算数平方根:" +sqrt(9));//调用了Math类的public static double sqrt(double a):一个数的正平方跟

    }

}

 

八,System类 :该类没有构造方法,所以字段和成员方法都用静态修饰

(1)in字段:InputStream        in =  System.in;                标准输入流

(2)out字段:PrintStream(字节打印流) ps =System.out ;                标准输出流

(3)常用的成员方法: public  static  void gc()运行垃圾回收器。

调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,最终调用的就是重写之后finalize()回收不用的对象!

(4)publicstatic void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。

(5) public static long currentTimeMillis():返回当前的时间毫秒值

#System类方法综合应用:

packageScannerDemo_01;

importjava.util.Scanner;

public class ScannerText01 {

    public static void main(String[] args) {

        Scanner Sc=new Scanner(System.in);

        System.out.println("请输入一个字符串:");

        String Str=Sc.nextLine();

        Str=null;

         System.gc();

         System.out.println("-----------");

         Person p=new Person(26,"王抢");

         System.out.println(p);

         long time=System.currentTimeMillis();//调用System类的public static longcurrentTimeMillis():返回当前的时间毫秒值

         System.out.println("系统时间的毫秒值为:" + time);

    }

}

 class Person{

    private int age;

    private String name;

    public Person(int age, String name) {

        this.age = age;

        this.name = name;

    }

    public Person() {

        super();

        // TODO自动生成的构造函数存根

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    @Override

    public String toString() {

        return "Person [age=" + age + ",name=" + name + "]";

    }

}


(6) publicstatic void arraycopy(Object src,int srcPos,Object dest, int destPos,intlength)     指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束

#arraycopy()方法应用:

packageScannerDemo_01;

importjava.util.Arrays;

public class arraycopyDemo {

    public static void main(String[] args) {

        int []arra1={23,12,45,22,65,19};

        int []arra2={9,4,8,6,7,16,12};

        System.arraycopy(arra1, 1, arra2,0, 5);//调用System类的public static void arraycopy(Objectsrc,int srcPos,Object dest, int destPos,intlength)

        System.out.println("被复制的数组:" +Arrays.toString(arra1));//被复制过后的数组是一个int型的数组,需要调用Arrays类的toString()方法,最后转换为int型字符串,将其打印出来

        System.out.println("复制后的数组:" + Arrays.toString(arra2));

    }

}


九:Collection

(1)   集合和数组的区别?

1)长度的区别: 数组:长度是固定的;

                             集合:长度是可变的

2)存储数据类型的区别: 数组:可以存储引用类型,可以存储基本数据类型

                                      集合:只能存储引用类型

3)存储元素的区别;数组:在同一个数组中,只能存储同一种数据类型的元素;

                 集合:可以 存储多种数据类型的元素;

#集合是可以存储多种类型的元素,但是,需求如果变化,针对集合来说,Java提供了很多集合类,每一种集合类的数据结构不一样,所以,将他们之间的共性内容抽取出来,就行了一个集合的继承体系图!

(2)   Collection: 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现

(3)   Collection的一些功能:

添加功能:

         boolean add(Object e):给集合中添加指定的元素

               boolean addAll(Collection c):添加一个集合中的所有元素

删除功能:

         void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)

        booleanremove(Object o):删除一个集合中的指定元素

           boolean removeAll(Collection c):删除一个集合中的所有元素(删除一个算是删除)

判断功能:

booleancontains(Object o):判断一个集合中是否包含指定的单个元素

      booleancontainsAll(Collection c):判断一个集合中是否包含另一个集合; (包含所有算是包含)

 

               boolean isEmpty():判断集合是否为空,如果为空,则返回true

交集功能:

        booleanretainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?

        答: A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false;

获取功能:

     intsize():获取集合中的元素数

         Iterator<E>iterator():迭代器

   转换功能:

                     Object toArray():将集合转换成数组

#数组中有没有length(),String类中有没有length(),集合中有没有length()?

数组中只有length属性,String类中有length()方法,集合中既没有length属性,也没有length()方法,只有size()方法.

#Collection方法的综合应用:

packageCollectionDemo_01;

importjava.util.ArrayList;

importjava.util.Collection;

public class CollectionText01 {

    public static void main(String[] args) {

        Collection Cl=new ArrayList();

        boolean flag1=Cl.isEmpty();//boolean isEmpty():判断集合是否为空,如果为空,则返回true

        System.out.println("判断该集合是否为空:" + flag1);

        Cl.add("hello");

        Cl.clear();//将该集合中的所有元素全部删除

        System.out.println("该集合被删除后:" + Cl);

        Cl.add("you");

        Cl.add("are");

        Cl.add("beautiful!");

        System.out.println("判断一个集合中是否包含另一个集合的内容:" + Cl.contains("you"));//调用boolean contains(Object o):

        System.out.println("求该集合的长度:" + Cl.size());//调用该集合的Size()方法

    }

}


(4) 集合的高级功能:

boolean addAll(Collection c):添加一个集合中的所有元素

boolean removeAll(Collection c):删除一个集合中的所有元素

boolean containsAll(Collection c):判断一个集合中是否另一个集合

boolean retainAll(Collection c): A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false

#集合高级方法的应用:

package CollectionDemo_01;

import java.util.ArrayList;

import java.util.Collection;

public class CollectionText02 {

publicstatic void main(String[] args) {

     CollectionCl1=new ArrayList();

     CollectionCl2=new ArrayList();

    

     Cl1.add("you");

     Cl1.add("are");

     Cl1.add("my");

     Cl1.add("sunshine!");

    

     Cl2.add("you");

     Cl2.add("are");

     Cl2.add("my");

     Cl2.add("sunshine!");

     Cl2.add("mylove!");

    

//       System.out.println(Cl1.addAll(Cl2));

//      

//       System.out.println(Cl1.containsAll(Cl2));//调用boolean containsAll(Collection c):判断一个集合中是否包含另一个集合; (包含所有算是包含)

//      

//       System.out.println(Cl1.removeAll(Cl2));//调用boolean removeAll(Collection c):删除一个集合中的所有元素(删除一个算是删除)

 

    System.out.println(Cl2.retainAll(Cl1));//调用boolean retainAll(Collection c):A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false

    System.out.println(Cl1);

    System.out.println(Cl2);

}

}


(5) Object[] objs = c.toArray() ;该方法将集合转换为数组

#求集合元素中每个元素与其长度应用:

packageCollectionDemo_01;

importjava.util.ArrayList;

importjava.util.Collection;

public class CollectionText03 {

    public static void main(String[] args) {

        Collection Cl1=new ArrayList();

        Cl1.add("you");

        Cl1.add("are");

        Cl1.add("my");

        Cl1.add("sunshine!");

        Cl1.add("my");

        Cl1.add("life");

        Cl1.add("is");

        Cl1.add("brillant!");

       

        Object []obj=Cl1.toArray();//将集合转换为数组

        for(int i=0;i<obj.length;i++){//遍历该集合,求出该集合中每个元素,并输出每个元素的长度

           

            System.out.println(obj[i] + "-----------" + ((String) obj[i]).length());//实际进行了向下转型String Str=(String)obj[i]

        }

    }

}


#有5个学生,每一个学生有自己的信息(姓名,年龄等等),将5个学生的信息遍历出来!

   使用集合的转换功能去遍历学生信息

packageCollectionDemo_01;

importjava.util.ArrayList;

importjava.util.Collection;

public class CollectionStudentDemo01 {

    public static void main(String[] args) {

        Collection Cl1=new ArrayList();

       

        Student s1=new Student(50,"王抢");

        Student s2=new Student(32,"上官万成");

        Student s3=new Student(21,"欧阳");

        Student s4=new Student(33,"黄埔");

        Student s5=new Student(22,"张三");

       

        Cl1.add(s1);

        Cl1.add(s2);

        Cl1.add(s3);

        Cl1.add(s4);

        Cl1.add(s5);

       

        Object []obj=Cl1.toArray();//将集合转换为数组

        System.out.println("学生的信息如下:");

        for(int i=0;i<obj.length;i++){

        //  System.out.println(obj[i]);

            Student s=(Student)obj[i];

            System.out.println(s.getName()+ "的年龄为:" + s.getAge());

        }

    }

}

class Student{

    private int age;

    private String name;

    public Student() {

        super();

        // TODO自动生成的构造函数存根

    }

    public Student(int age, String name) {

        this.age = age;

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public String getName() {

        return name;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public void setName(String name) {

        this.name = name;

    }

}


十, 迭代器

(1)  成员方法: Object next()返回迭代的下一个元素:获取功能

boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能

#使用迭代器对集合进行遍历:

packageIteratorDemo_01;

 

importjava.util.ArrayList;

importjava.util.Collection;

importjava.util.Iterator;

 

public class IteratorText01 {

    public static void main(String[] args) {

        Collection Cl1=new ArrayList();

        Student s1=new Student(16,"张三");

        Student s2=new Student(21,"李四");

        Student s3=new Student(23,"王五");

        Student s4=new Student(26,"黄六");

        Cl1.add(s1);

        Cl1.add(s2);

        Cl1.add(s3);

        Cl1.add(s4);

        Iterator it=Cl1.iterator();//创建iterator对象

        System.out.println("以下是将Student的基本信息:");

        while(it.hasNext()){//调用iteratorhasnext()方法,判断是否有下一个遍历对象;同时iteratornext()方法不能使用多次,否则会出现异常

            Student s=(Student)it.next();//因为iteratornext()方法返回Object类型,所以需要使用向下转型,将父类的引用强制转化为子类的引用

            System.out.println(s.getName() + "---" + s.getAge());//使用子类的对象调用get()方法

        }

    }

 

}

class Student{

    private int age;

    private String name;

    public Student() {

        super();

        // TODO自动生成的构造函数存根

    }

   

    public Student(int age, String name) {

        this.age = age;

        this.name = name;

    }

 

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}


(2)    对象数组:

#对象数组应用:

packageIteratorDemo_01;

public class DUIDemo {

    public static void main(String[] args) {

        Person[] p=new Person[4];//创建对象数组,并初始化,指定对象数组的长度

        Person p1=new Person(18,"貂蝉");//创建Person的对象,并传入参数,进行赋值

        Person p2=new Person(20,"西施");

        Person p3=new Person(22,"杨贵妃");

        Person p4=new Person(20,"王昭君");

        p[0]=p1;//将对象的信息分别赋值给对象数组

        p[1]=p2;

        p[2]=p3;

        p[3]=p4;

        System.out.println("美女信息如下:");

        for(int i=0;i<p.length;i++){

            System.out.println(p[i].getName() + "---" + p[i].getAge());//通过Person类对象调用其getname()方法和getage()方法

        }

    }

}

class Person{

    private int age;

    private String name;

   

    public Person() {

        super();

        // TODO自动生成的构造函数存根

    }

    public Person(int age, String name) {

        this.age = age;

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}


十一: List集合:

              (1)是一个有序的集合(存储元素和取出元素是一致的!)该集合中的元素是可以重复的.

#list集合的迭代器遍历该集合中的一个元素:

packageListDemo_01;

importjava.util.ArrayList;

importjava.util.Iterator;

importjava.util.List;

public class ListText01 {

    public static void main(String[] args) {

        List li=new ArrayList();//创建list对象

       

        li.add("you");

        li.add("are");

        li.add("my");

        li.add("sunshine!");

        li.add("my");//list该集合中的元素是可以重复的.

       

        Iterator it=li.iterator();

        System.out.println("遍历后的结果为:");

        while(it.hasNext()){//先判断是否有下一个遍历的对象

            System.out.print( it.next()+ " ");//接着遍历该集合中的每一个元素

        }

    }

}


(2)List集合的特有功能:

添加功能: void add(int index, Object element)在列表的指定位置插入指定元素

删除功能: Object remove(int index)移除列表中指定位置的元素,返回被删除的元素

获取功能: ListIterator listIterator():列表迭代器:List集合的专有遍历方式

               Object get(int index)返回列表中指定位置的元素。

替换: set(int index,Object element)用指定元素替换列表中指定位置的元素

#list集合方法应用:

packageListDemo_01;

importjava.util.ArrayList;

importjava.util.List;

public class ListText02 {

    public static void main(String[] args) {

        List li=new ArrayList();//创建list迭代器的对象

       

        li.add("you");

        li.add("are");

        li.add("my");

        li.add("baby!");

       

        li.add(1, "");//调用listvoid add(int index, Object element)在列表的指定位置插入指定元素

        System.out.println("添加元素之后:" + li);

        li.remove(1);//调用listObject remove(int index)移除列表中指定位置的元素,返回被删除的元素

        System.out.println("删除指定位置的元素后:" + li);

        li.set(3, "sunshine!");//调用listset(int index,Object element)用指定元素替换列表中指定位置的元素

        System.out.println("替换指定位置的元素后:" + li);

    }

}


(3)    List集合的列表迭代器:

ListIterator listIterator()列表迭代器接口中有以下几个方法:

       booleanhasNext():判断是否有下一个可以迭代的元素(正向遍历)

       Objectnext():如果有可以遍历的元素,就获取这个元素

booleanhasPrevious():判断是否有上一个可以迭代的元素(逆向遍历)

Object  previous():如果有上一个可以迭代的元素,就获取上一个元素

#:要使用逆向遍历,前提必须有正向遍历存在,直接使用逆向遍历,没有意义!

#list迭代器的正向逆向遍历:

packageListDemo_01;

importjava.util.ArrayList;

import java.util.List;

importjava.util.ListIterator;

public class ListText03 {

    public static void main(String[] args) {

        List li=new ArrayList();//创建list对象

       

        li.add("my");

        li.add("life");

        li.add("is");

        li.add("brillant!");

       

        System.out.println("list集合迭代器的正向遍历:");

        ListIteratorit=li.listIterator();

        while(it.hasNext()){

            System.out.print(it.next()+ " ");

        }

        System.out.println(" ");

        System.out.println("list集合的逆向遍历:");

        while(it.hasPrevious()){

            System.out.print(it.previous() + " ");

        }

    }

}


#描述:使用迭代器去遍历集合,是不能直接集合添加元素!

解决方案: 1)使用列表迭代器遍历集合,使用列表迭代器添加元素

              2)使用集合遍历,使用集合添加元素

#遍历集合中的元素:

packageListDemo_01;

importjava.util.ArrayList;

importjava.util.List;

import java.util.ListIterator;

public class ListText04 {

    public static void main(String[] args) {

        List li=new ArrayList();//创建list对象

       

        li.add("I");

        li.add("need");

        li.add("you!");

        for(int i=0;i<li.size();i++){//通过集合遍历该集合中的元素

            String Str=(String) li.get(i);//调用list

            if("I".equals(Str)){

                li.add("hello!");//在集合末尾添加

            }

        }

        System.out.println("遍历的结果为:" + li);

//      ListIterator it=li.listIterator();//创建列表迭代器

//      while(it.hasNext()){//通过list的迭代器进行遍历集合中的元素

//          String Str2=(String)it.next();

//          if("need".equals(Str2)){

//              it.add("hi!");

//          }

//      }

//      System.out.println(it.toString());

    }

}


十二:正则表达式:

(1)  A:字符

反斜线字符: 用两个\\代表一个反斜线

(2)B:字符类

       [abc]           a、b 或 c(简单类)

       [^abc]          任何字符,除了 a、b 或 c(否定)

       [a-zA-Z]      a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可

(2)  C:预定义字符类

.                    邮箱里面:如果本身就是.,那么在写正在表达式的时候,\.将当前.转义

数字:[0-9]   \d在正则表达式应用的时候:[0-9]--->\\d

单词字符:   [a-zA-Z_0-9]:简单一些字符串,单词字符(规则:数字或者字母)

(3)  D:边界匹配器

^                   行的开头

$                    行的结尾

\b                  单词边界 :

                      hello;world:haha:xixi

(4)  E:Greedy数量词

X?                 X,一次或一次也没有

X*                  X,零次或多次

X+                X,一次或多次

X{n}              X,恰好 n 次

X{n,}             X,至少 n 次

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

#检验一个QQ号是否满足所给条件:

packageregexDemo_01;

importjava.util.Scanner;

public class RegexText {

    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);

        System.out.println("请输入一个qq:");

        String qq=sc.nextLine();

        boolean flag=Check(qq);

        System.out.println(flag);

    }

    public static boolean Check(String s){

        String regex="[1-9]\\d{4,9}";//定义正则表达式

        boolean flag1=s.matches(regex);//public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。

        return flag1;

    }

}


#检验qq邮箱号是否符合规则:

packageregexDemo_01;

importjava.util.Scanner;

public class RegexText02 {

    public static void main(String[] args) {

        Scanner Sc=new Scanner(System.in);

        System.out.println("请输入一个邮箱号:");

        String Email=Sc.nextLine();//String类型去接收邮箱号

        boolean flag=EmailCheck(Email);

        System.out.println(flag);

    }

    public static boolean EmailCheck(String s){

        String regsx="[1-9]\\d{8,10}@[a-zA-Z]{2}.[a-zA-Z]{3}";//定义正则表达式

        return s.matches(regsx);//调用String的特有方法public boolean matches(String regex)

    }

}


#String类的split()方法:

packageregexDemo_01;

public class SpiltText01 {

    public static void main(String[] args) {

        String Str="my life is brillant!";

        String []StrArray=Str.split(" ");//调用String类的public String[] split(String regex)

        System.out.println("分割后的数组是:");

        for(int i=0;i<StrArray.length;i++){

            System.out.print(StrArray[i] + ",");

        }

    }

}


(5)  关于模式和匹配器的使用:

1.获取模式对象(通过正则规则)   列: Pattern p = Pattern.compile("a*b");

2. 通过模式获取匹配器对象,(将一个字符串类型的数据)   列: Matcher m = p.matcher("aaaaaab") ;

3. 调用Match(匹配器类)中的:public boolean matches():判断当前用户录入的字符串是否和当前的正则规则匹配   例: boolean flag = m.matches() ;

#模式对象与匹配器的综合应用:

packageregexDemo_01;

import java.util.regex.Matcher;

importjava.util.regex.Pattern;

 

public class PatternText01 {

    public static void main(String[] args) {

        Pattern p= Pattern.compile("1[578][1-9]{9,}");//创建模式对象,并定义正则表达式;

        Matcher m=p.matcher("18291622798");//创建匹配器对象,并传入String类型的参数

        boolean flag=m.matches();

        System.out.println("将传入的参数与定义的正则表达式进行对比:" + flag);

    }

}


#将字符串"91 27 46 38 50"转化为字符串"27 38 46 50 91"应用:

packageregexDemo_01;

importjava.util.Arrays;

public class SpiltText02 {

    public static void main(String[] args) {

        String Str="26 31 19 65 50 43 29";//定义字符串

        String[] StrArray=Str.split(" ");//调用StringSpilt()方法;返回一个String类型的字符串

        int [] array=new int[StrArray.length];//String类型数组转换为int型数组

        for(int i=0;i<array.length;i++){

            array[i]=Integer.parseInt(StrArray[i]);//调用Integer类的public static intparseInt(String s)方法,String类型数转换为int型数

        }

        Arrays.sort(array);//对数组进行排序

        StringBuilder sb=new StringBuilder();//创建StringBuilder对象,此对象可以接收任意类型的元素

        for(int i=0;i<array.length;i++){

            sb.append(array[i]).append(" ");//遍历该int型数组,并将该数组存放在StringBuilder

        }

        String result=sb.toString().trim();//StringBuilder类型转换为String类型,在调用Stringtrim()方法,去掉两边的空格

        System.out.println(result);

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值