正则表达式:
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) {
//ArrayList是List集合的子实现类(存储和取出一致的)
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);
}
}