正则表达式Collection集合

正则表达式:

A:字符

X  字符x:任意的字符

\\反斜线字符                  在代码中书写正则表达式:\------>用两个\\ 表示一个反斜线

\n  换行符

\r    回车符

B:字符类

[abc]    a或者b或者c  简单类

[^abc]     除了a.b.c的任意字符   ^表示否定

[a-zA-Z]  a到z或者A到Z  包括两头的字母

C:预定义字符类

.      任意字符   如果本身就是. 那么写是需要\. 当前转义

\d      数字:[0-9]  \d在正则表达式应用为\\d

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

D:边界匹配器

^                       行的开头

$                        行的结尾

\b                     单词边界 :

E:Greedy数量词

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

X*     X,零次或多次

X+            X,一次或多次     

X{n}     X,恰好 n 次

X{n,}                  X,至少 n 次

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

 

校验一个QQ号码

定义一个规则

1.     由5到10为10为组成的数字

2.     不能以0开头

分析

1.     键盘录入一个QQ号码,使用字符串接受

2.     定义一个效验QQ的功能

3.     在main()中调用返回boolean类型

 

用判断语句去做

import java.util.Scanner;

public class RegexDemo {

public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

    System.out.println("请您输入一个QQ号码");

    String QQ=sc.nextLine();

    //效验QQ的功能

    boolean flag = checkQQ(QQ) ;

    System.out.println("flag:"+flag);

}

//创建一个检验QQ的静态方法

private static boolean checkQQ(String qq) {

    boolean flag = true ;

    if(qq.length()>=5 && qq.length()<=10){

       if(!qq.startsWith("0")){

           //qq,转换成字符数字

           char[] chs =qq.toCharArray() ;

           //遍历字符数组,获取每一个字符

           for(int x = 0 ; x < chs.length ; x ++){

              char ch = chs[x] ;

              if(!Character.isDigit(ch)){

                  flag = false ;

                  break ;

                  }

           }

       }else{

           flag = false ;

       }

    }else{

       flag = false ;

    }

    return flag;

}

}

 

使用正则表达式去效验:

import java.util.Scanner;

public class Regextext1 {

public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

    System.out.println("请输入一个QQ号码");

    String qq=sc.nextLine();

    boolean flag=checkQQ(qq);

    System.out.println("flag:"+flag);

}

private static boolean checkQQ(String qq) {

    String regex="[1-9][0-9]{5,9}";

    boolean flag=qq.matches(regex);

    return flag;

    //直接返回

//  return qq.matches("[1-9]\\d{4,9}");

}

}

 

练习:使用正则表达式效验手机号码

规 则 :    11位数字  开头是一定的

1.  创建键盘录入对象

2.  定义正则规则

3.  String类的特有功能

Public boolean  matches(String regex)告知此字符串是否匹配给定的正则表达式

 Eg:

import java.util.Scanner;

public class RegexText2 {

public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

    System.out.println("请输入一个手机号");

    String phonenumber=sc.nextLine();

    String regex="1[3-9][0-9]{9}";

    boolean flag=phonenumber.matches(regex);

    System.out.println("flag:"+flag);

}

}

 

 

练习:校验邮箱:

Eg: xxxxx@126.com

    zhangsan@westos.com

eg:

import java.util.Scanner;

public class RegexText3 {

public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

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

    String email=sc.nextLine();

    String regex="\\w+@\\w{2,6}(\\.[a-zA-Z]{2,4})";

    boolean flag=email.matches(regex);

    System.out.println("flag:"+flag);

}

}

当正则表达式定义错误时

会报java.util.regex.PatternSyntaxException异常: 抛出未经检查的异常, 表明正则表达式模式中的语法错误。

 

String的分割功能

 Public String[]split(String regex)根据给定的正则表达式的匹配拆分次字符串

返回值类型是一个字符串数组类型

应用场景: QQ,搜索好友,查询匹配好友等

练习:查询  女:”18-24”;

import java.util.Scanner;

public class RegexStringText {

public static void main(String[] args) {

      String ages="18-24";

      String regex="-";

    //publicString[] split(String regex)

      String[]strArray=ages.split(regex);

      int startAge=Integer.parseInt(strArray[0]);

      int endAge=Integer.parseInt(strArray[1]);

      Scanner sc=new Scanner(System.in);

      System.out.println("请您输入一个年龄");

      int age=sc.nextInt();

      if(age>=startAge&&age<=endAge){

     System.out.println("查找成功");

      }else{

     System.out.println("查找失败");

      }

}

}

 

分割功能的应用:

public class RegexStringText1 {

public static void main(String[] args) {

    String str="aa,dd,vv";

    String[]strArray=str.split(",");

    for(int x=0;x<strArray.length;x++){

       System.out.println(strArray[x]);

    }

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

    String str2 = "aa    dd   vv" ;

    String[] strArray2 = str2.split(" +") ;//空格为切割的

    for(int x = 0 ; x <strArray2.length ; x++){

       System.out.println(strArray2[x]);

    }

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

     String str3 = "aa.bb.cc" ;

     String[] strArray3 =str3.split("\\.") ;//当用.分割时需要加上两个反斜线

     for(int x =0 ;x<strArray3.length ; x ++){

       System.out.println(strArray3[x]);

    }

}

}

 

当分割的为\\ 时需要用两个\\来表示一个反斜线

 

String类的替换功能:和正则表达式有关

public String repalceAll(String regex,String replacement)

使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串

Eg:

public class RegexStringText {

public static void main(String[] args) {

    String str="JavaSE25652JavaWeb562Linux";

    String regex="[0-9]+";

    String regex1="\\d+";//两个含义相同

    String s="*";

    String result = str.replaceAll(regex1, s) ;

    System.out.println("result:"+result);

    }

}

 

关于模式和匹配器的使用:获取功能

Eg:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/* 1获取模式对象通过正则规则

 * (2)通过模式获取匹配器对象,(将一个字符串类型的数据)

 * (3)调用Match(匹配器类)中的:public booleanmatches():判断当前用户录入的字符串是否和当前的正则规则匹配

 */

public class RegexStringtext1 {

public static void main(String[] args) {

     Pattern p=Pattern.compile("a*b");

     Matcher m=p.matcher("aaaaaab");

     boolean flag = m.matches() ;

     System.out.println("flag:"+flag);

//上述写法麻烦,需要获取模式对象Pattern还要获取匹配器对象:Matcher

     String regex="a*b";

     String str="aaaaaaab";

     boolean flags=str.matches(regex);

     System.out.println("flag2:"+flags);

}

 

 

Collection集合

集合的由来:

    我们学习java的语言,是一种面向对象语言,面向对象语言对事物的描述是通过对象体现出来的 就需要使用容器变量进行存储

 已经知道的容器变量呢?

 数组,StringBuffer/StringBuilder,对于数组来说,数组的长度是固定的,不符合实际需求(长度不可变);对于StringBuffer来说始终在内存中返回的是字符串类型,也不满足元素类型变化的要求;新产生了集合!

  

 面试题:     集合和数组的区别?

1. 1)长度的区别:数组的长度固定   集合的长度是可变的

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

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

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

 

Java提供了很多集合类,每一种集合类的数据结构不一样.

数据结构:存储数据的方式:

 

Collection:表示一组对象,这些对象也成为collection的元素, 一些 collection允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接.

解决方法:集合提供了更具体的子接口(如set和List)方法.

添加功能:

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

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

删除功能:

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

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

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

判断功能:

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

boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.  包含所有

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

交集功能:boolean retainAll(Collection c):

返回值boolean表达什么意思?

获取功能: int size():获取集合中的元素数

 Iterator<E>iterator():迭代器

转换功能:

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

 

面试题: 数组中有没有length(),String类中有没有length(),集合中有没有length()?

数组中:length属性    String:length()    集合中:size();   

 

集合的高级功能:

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

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

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

eg: import java.util.ArrayList;

import java.util.Collection;

public class CollectionText3 {

public static void main(String[] args) {

    Collection c1=new ArrayList();

    Collection c2=new ArrayList();

    c1.add("abc1");

    c1.add("abc2");

    c1.add("acb3");

 

    c2.add("abc1") ;

    c2.add("abc2") ;

    c2.add("abc3") ;

    c2.add("abc4") ;

    c2.add("abc5") ;

    c2.add("abc6") ;

    c2.add("abc7") ;

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

    System.out.println("addAll:"+c1.addAll(c2));

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

    //删除一个就算是删除

    System.out.println("removeAll:"+c1.removeAll(c2));

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

    //包含所有算是包含

    System.out.println("containsAll:"+c1.containsAll(c2));

 

}

}

boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回boolean是什么?

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

Eg:   System.out.println("retianAll:"+c1.retainAll(c2));

 

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

import java.util.ArrayList;

import java.util.Collection;

public class CollectionDemo3 {

public static void main(String[] args) {

    Collection c=new ArrayList();

    c.add("钢铁侠");

    c.add("金刚狼");

    c.add("Faker");

    //将集合转换成数组

    Object[]arr=c.toArray();

    for(int x=0;x<arr.length;x++){

//  System.out.println(arr[x]+"---"+arr[x].length());

    //不能直接获取  需要使用length();该方法属于String类的特有功能

    String s = (String) arr[x] ;

    System.out.println(s+"---"+s.length());

    }

}

}

 

练习: 有5个学生,每个人有自己的信息,将5个学生的信息遍历出.

使用集合的转换方法去遍历学生信息

1.  创建集合对象

2.  创建5个学生对象

3.  使用集合添加5个学生对象

4.  将集合转换成数组:Object[]toArray();

5.  遍历数组

创建一个Student的类

里面有参 无参 getset方法设置 重写toString

 

测试类代码Eg:

import java.util.ArrayList;

import java.util.Collection;

public class CollectionDemo4 {

public static void main(String[] args) {

    Collection c=new ArrayList();

    Student c1=new Student("邓聪",21);

    Student c2=new Student("彭楷",20);

    Student c3=new Student("杨启龙",20);

    Student c4=new Student("郭子正",20);

    Student c5=new Student("吴文龙",20);

    c.add(c1);

    c.add(c2);

    c.add(c3);

    c.add(c4);

    c.add(c5);

    Object[]arr=c.toArray();

    for(int x=0;x<arr.length;x++){

    Student s=(Student) arr[x];

    System.out.println(s.getName()+"--"+s.getAge());

    }

}

}

输出结果:

邓聪--21

彭楷--20

杨启龙--20

郭子正--20

吴文龙--20

 

集合的专有遍历方式:使用集合迭代功能遍历集合中的元素

Iterator iterator():迭代器       Iterator:迭代器:接口

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

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

 

eg:

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class CollectionText2 {

public static void main(String[] args) {

    //ArrayListList集合的子实现类(存储和取出一致的)

    Collection c=new ArrayList();

    c.add("风暴女");

    c.add("海克斯安妮");

    c.add("战熊骑士");

    c.add("lpl");

    c.add("lpl");

    c.add("lpl");

    Iterator it = c.iterator() ;

    底层使用ArrayList中的匿名内部类的形式:接口多态的形式

    while(it.hasNext()){

    Strings=(String)it.next();

        System.out.println(s+"---"+s.length());

    } 

}

}

 

对象数组:来遍历信息

有5个学生,每个人有自己的信息,将5个学生的信息遍历出.

public class ObjectArrayDemo {

public static void main(String[] args) {

    Student[] xinguan=new Student[5];

    Student c1=new Student("邓聪",21);

    Student c2=new Student("彭楷",20);

    Student c3=new Student("杨启龙",20);

    Student c4=new Student("郭子正",20);

    Student c5=new Student("吴文龙",20);

    xinguan[0] = c1 ;

    xinguan[1] = c2 ;

    xinguan[2] = c3 ;

    xinguan[3] = c4 ;

    xinguan[4] = c5 ;

    for(int x=0;x<xinguan.length;x++){

    Student s=xinguan[x];

    System.out.println(s.getName()+"--"+s.getAge());

    }

}

}

 

 

List集合

用List集合存储字符串类型的元素,并用迭代器遍历

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ListText1 {

public static void main(String[] args) {

    List list=new ArrayList();

    list.add("javase");

    list.add("web");

    list.add("javaee");

    Iterator it=list.iterator();

    while(it.hasNext()){

       String s=(String) it.next();

        System.out.println(s);

    }

}

}

List集合是一个有序的集合(存取一致)

且元素可以重复

 

List集合的特有功能

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

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

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

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

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

 

Eg:

import java.util.ArrayList;

import java.util.List;

public class ListText2 {

public static void main(String[] args) {

    List list=new ArrayList();

    list.add("javase");

    list.add("javaweb");

    list.add("javaee");

    //void add(int index, Objectelement)

    //在列表的指定位置插入指定元素,在指定位置前面插入一个新的元素

    list.add(1,"importment");

    //Object remove(int index)

    //移除列表中指定位置的元素,返回被删除的元素

    System.out.println("list"+list);

    System.out.println("remove:"+list.remove(2));

    // set(int index,Object element)

    //用指定元素替换列表中指定位置的元素

    System.out.println("set:"+list.set(1,"veryimportment"));

    System.out.println("list"+list);

}

}

 

输出结果:

list[javase, importment,javaweb, javaee]

remove:javaweb

set:importment

list[javase, veryimportment,javaee]

 

List集合的遍历方式

1.     toArray

2.     Collection集合中的Iterator iterator();

Eg:

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ListText3 {

public static void main(String[] args) {

    List list=new ArrayList();

    list.add("Css") ;

    list.add("java") ;

    list.add("C++") ;

    list.add("R") ;

    list.add("JavaScript") ;

    list.add("python") ;

    for(int x=0;x<list.size();x++){

       Object object=list.get(x);

       String s=(String)list.get(x);

        System.out.println(s+"---"+s.length());

    }

    Iterator a=list.iterator();

    while(a.hasNext()){

       String s=(String)a.next();

       System.out.println(s+"---"+s.length());

    }

}

}

 

List集合的列表迭代器

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

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

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

booleanhasPrevious():判断是否有上一个可以迭代的元素(逆向遍历) //必须有正向遍历存在

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

Eg:

import java.util.ArrayList;

import java.util.List;

import java.util.ListIterator;

public class ListText5 {

public static void main(String[] args) {

    List list = new ArrayList() ;

    list.add("hello") ;

    list.add("world") ;

    list.add("java") ;

   ListIterator it = list.listIterator();

    while(it.hasNext()){

    String s = (String)it.next();

       System.out.println(s);

}

    while(it.hasPrevious()){//逆向遍历

       String s = (String)it.previous() ;

       System.out.println(s);

}

}

}

 

练习:我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,

如果有,我就添加一个"javaee"元素,请写代码实现

解决方法:

1.     使用迭代器遍历集合,使用迭代器添加元素

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

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ListDemo2 {

public static void main(String[] args) {

    List list = new ArrayList() ;

    list.add("hello") ;

    list.add("world") ;

    list.add("java") ;

    Iterator it = list.iterator() ;

//使用集合遍历(普通for循环size()和get()相结合),使用集合添加元素

    for(int x = 0 ; x <list.size() ; x ++){

       String s = (String) list.get(x) ;

       if("world".equals(s)){

           list.add("javaee") ;//在末尾添加元素

       }

}

    System.out.println("list:"+list);

}

}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值