Arrays工具类,正则表达式

1.Arrays工具类
1.Arrays工具类概述:

//Arrays里面的方法全部都是静态的
public class Test {
    public static void main(String[] args) {
//        数组的工具类
//        数组的遍历
        int[] arr={2,323,13,1,51,1,5,15,15,33};
//        将数组直接打印成字符串,该功能返回的是String类型
        System.out.println(Arrays.toString(arr));
    }
}

2.Arrays工具类方法

//将数组进行排序
public class Test1 {
    public static void main(String[] args) {
        int[] arr={2,214,234,412,42,1,125,215,1,52};
//        通过Arrays.sort方法对数组进行排序
//        Arrays.sort(arr);//默认升序排列
//        System.out.println(Arrays.toString(arr));
//        Arrays.sort(arr,1,5);//指定一段范围进行排序(也是含头不含尾)
//        System.out.println(Arrays.toString(arr));
        Integer[] a={321,421,32,4125,5235,23};//对包装类进行排序
        Arrays.sort(a, new Comparator<Integer>() {
            @Override
            public int compare(Integer b, Integer c) {
                return b-c;//匿名内部类,b-c>0,升序排,b-c<0,降序排
            }
        });
        System.out.println(Arrays.toString(a));


    }
}

3.Arrays工具类得查找方法

//二分查找(前提是数组要有序)
public class Test2 {
    public static void main(String[] args) {
  int a[]={32,4124,1,1212,1000,1,512,51,512,51,512,421,421,2,21,12,412,412,21,};
        Arrays.sort(a);//对数组进行排序了,升序
        System.out.println(Arrays.toString(a));
//        对数组进行查找元素索引的方法:
        int index =Arrays.binarySearch(a,21);//对于有重复元素的,查找的为元素第一次出现的索引,二分法进行的查找
        System.out.println(index);
    }
}

4.Arrays得equals方法

//比较两个数组元素是否一样
public class Test3 {
    public static void main(String[] args) {
   int[] arr1={312,2,2,131,13,334,3,41412,4,51,154,111};
        int[] arr2={312,2,2,111,131,13,334,3,41412,4,51,154};
        boolean a= Arrays.equals(arr1,arr2);//要求元素位置和元素大小一一对应,完全一样才可以,这里面就111,的位置不一样
        System.out.println(a);
    }
}

5.复制数组功能

//复制数组
public class Test4 {
    public static void main(String[] args) {
        int[] arr={321,31,3,13,14,4,2,412,421,};
        int[] ints = Arrays.copyOf(arr, 3);//复制这几个元素(3个元素),数字代表其长度,返回一个数组
        System.out.println(Arrays.toString(ints));
        int[] ints1 = Arrays.copyOf(arr, arr.length);//全部复制
        System.out.println(Arrays.toString(ints1));
//        copyOfRange(int[] original, int from, int to)
//          将指定数组的指定范围复制到一个新数组。
        int[] ints2 = Arrays.copyOfRange(arr, 2, 5);//含头不含尾,所以一共三个元素,2是起始索引,5是终止索引
        System.out.println(Arrays.toString(ints2));

    }
}

2.正则表达式
1.正则表达式得写法

package 正则表达式.正则表达式的写法;
//从这个类开始,这里面的字符最好把它当作正则表达式去看待
//且正则表达式都是字符串类型的
//都是单个匹配的
public class Test {
    public static void main(String[] args) {
//        定义正则表达式
        String regx="a";
        boolean a = "aaa".matches("a");//匹配列表中任意一个字符,就是括号里面的
       regx="[a,b,c,d,e]";

       "aaa".matches(regx);//"aaa"和regx中的任意一个字符进行匹配,如果匹配上了,返回true,注意是匹配,不是判断是否相等
        boolean matches = "a".matches(regx);
        System.out.println(matches);//true
      regx="[a-z]";//就代表a-z 26个字母,A-Z,0-9也是这样
        boolean matches1 = "f".matches(regx);
        System.out.println(matches1);//true
        regx="[A-Z]";
        regx="[0-9]";
        regx="[a-zA-Z0-9]";//包含了a-z,A-Z,0-9所有的字符
        regx="[^a-z]";//表示取反,只要不是a-z就行
        System.out.println("9".matches(regx));//ture,因为9不在a-z的里面,如果把9换成a-z任意一个,就不行了,因为为取反,为false
        regx = ".";//表示通配符,代表任意一个字符,注意是任意一个,不能是多个,任意字符都可以,JAVA认定符号都可以
        regx="..";//代表任意两个字符
        System.out.println("!b".matches(regx));
//        这个点本意代表的是任意字符,但是我匹配的时候我就是想看看一个字符是不是和点进行匹配,就需要对.这个字符进行转义(\\)就
//        可以了
//        如果只是想匹配点(.)本身,就只是想匹配点,那样要带转义字符,\\.就可以了,代表的是将点转义了,就是只是看看点是不是和
//        点进行匹配,为什么是两个\\,先记住,后面在回看吧
        regx="\\.";
        System.out.println(".".matches(regx));
        regx="|";//本意是或者的意思,但是我就是想比较"|"这个单纯的这个字符是否和"|"匹配,就要进行转义,转义先记着是"\\"两个
//           比如:
        regx="a|b";//表示的是a或b
        regx="\\|";//就进行了转义,表示成了只是一个“|”字符了
        regx ="\\w";//代表[a-zA-Z_0-9],转义字符就为\\w,这个表示取任何单个字母都可以,下划线也带着记住
        System.out.println("dasda");
        regx="\\W";//大写的W就表示\\w的取反,就是不能取那些
        System.out.println("a".matches(regx));
        System.out.print("\t");//除了换行符,tab这么写,别的就按照//的格式来
        System.out.println("1111111");
        regx="\\d";//跟0-9的意思一样
        System.out.println("6".matches(regx));//true
        regx="\\D";//表示不能取数字,大写的好像都是像取反的,取反是^
        System.out.println(" ".matches(regx));
        regx="\\s";//匹配空格字符
        System.out.println("a".matches("^\\w"));//这种的都是认双不认单,写成单个\的就报错,写成双的才行
        System.out.println("\\\\\\n");//\t \n 还有跟换行啥的都关的都是可单可爽,但是写成单的就会行使他的功能,
//        多了的话(\是奇数的情况下),会执行该功能,即\n看成一个(会行使功能换行),完事剩下的\除以二就行,
//        类似\n要是双的情况下,就直接显示(偶数的\)除以2加个n
//        还有一个,下划线也认单不认双,这个单双是刨去了自己的那个下划线,记住
//       反正记住,只有换行的那几个是单斜杠的,其余的转义的都是双斜杠的,记住吧,如果只想让特殊功能的字符变成普通的字符,加
//        两个\\,如果想让普通的字符变成特殊功能的字符,加两个\\,记住这个就行了
    }
}

2.数量正则表达式得写法

//数量正则表达式的写法
public class Test1 {
    public static void main(String[] args) {
// ?表示一次或一次也没有,比如""空串,就是没有,空串也代表一次也没有,空串就代表没出现过,无论哪个字母,只要没出现就是true被
//        所以空串就可以代表任意一个字母一次也没出现过
        String regx="ab?";//表示运行a或b出现一次或者不出现,多了就是false
        System.out.println("a".matches(regx));//true
        System.out.println(("ab".matches(regx)));//true
        System.out.println("abb".matches(regx));//false
        regx="\\w?";//这样写的话就表示成了,字母出现一次或者没出现都算true,这里要记得只能选一个字符与其匹配,因为这两个
//        正则表达式的规则就是选一个字符
        regx="[a-z]?";//只能选一个字符与其匹配
        System.out.println("aa".matches(regx));//false
        System.out.println("ab".matches(regx));//false
        System.out.println("".matches(regx));//表示任意一个字母一次也没出现过,true
//
//        ===========================================================
//        * 零次或多次,大于等于1次,都算多次
        regx="[a-z]*";//表示小写字母可以出现0次和多次,有别的字符不行
        System.out.println("dsadasasfafafasfsaf".matches(regx));//只有小写字母为true
//        这贼奇怪,记住吧,写成[a-zA-Z_0-9]或\\w或\\d中,*和+可以匹配任种且任意个字符,?只能匹配一个
//        +表示一次或多次,最少为一次
             regx="b+c+";//表示只能b或c最少写一次,别的不能写,写了就为false
        System.out.println("bccbcbcbcbcb".matches(regx));//true
        regx="\\w+";
        System.out.println("dfsafDJDHFA_44141r32524522341".matches(regx));
        regx="a{3}";//表示a出现的次数只能是三次
        System.out.println("aaa".matches(regx));//true
//        加入要数组字母下划线,只能写6位密码,可以这样写
        regx="\\w{6}";
        System.out.println("a12345".matches(regx));
        regx="\\w{6,}";//这个叫做至少6次,注意看里面的逗号
        System.out.println("asfasfsafasgasga".matches(regx));//true,至少,只要,最多的时候都是不限制使用次数的,一个字母可以写
//        多次

          regx="\\w{6,12}";//表示小于等于12次,大于等于6次
        System.out.println("dadfdsgv".matches(regx));

         regx="[1-9][0-9]{4,14}";//这个正则表达式的意思是第一位只能以1到9取一个数,第二位开始可以取0到9的数,然后最少取4位
//        最多取14位,从第二位开始时最少取4,最多取14,规定取次数的的这个要紧挨着取值范围的
//================================================================================================
//        现在试试手机的那个例子:
//        以1开头,手机号码为11位,每一位都是数字,手机号码第二位3-9
        String num="[1][3-9][0-9]{9}";//从第三位开始只能写9次数字
        System.out.println("1315218a232".matches(num));//false
    }

}

3.正则表达是规则:

public class Test {
    public static void main(String[] args) {
//        正则表达式:正确规则的表达式,是一种语法,作用:定义一些规则,用来对对应数据进行规则的校验
//        很多语言都支持正则表达式
//        正则表达式是一个独立的语法,主要用来判断字符的格式什么的是不是正确。
//        案例,查看邮箱名是否正确:
//        6-18个字符,可以用字母,数字,下划线,需要以字母开头:(下面写得是我按照QQ邮箱得格式写的)
        String num="\\w[a-zA-Z0-9_@#\\.]{5,17}";//这里的点要转义一下,否则就是通用字符了
        System.out.println("Guotao123@qq.com".matches(num));
        System.out.println("1044143167@qq.com".matches(num));
        System.out.println("\\");
        System.out.println("\\.");//这也是代表成了一个普通得符号
        System.out.println("\\^");//这样就表示的是单纯的一个^符号,没有任何功能的,^在正则表达式里面是代表非得意思
          String num1="[A-Za-z]\\w{0,11}@qq\\.com";//后面那一块@qq.com要是想写死就写成这样得,也就是说只能写成@qq.com,
//        写成别得就是是错
        System.out.println("F044143167@qq.com".matches(num1));//要想只是使用该字符,不用其特定功能得一定要转义
      String mmm="[a-zA-Z]{1}";
        System.out.println("a".matches(mmm));
//        判断中文得正则表达式:
        String chinese="[u4e00-u9fa5]";//所有得汉字都是从里面取得,记住这个就行,最后记
    }
}

4.关于正则表达式的练习:

import java.util.Scanner;

//练习:定义一个手机号的规则,要求:
//以“1”开头
//手机号长度就是11
//手机号第二位要是 3456789
public class Test2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的手机号码");
        String s = scanner.nextLine();
        boolean b = Judgment(s);
        if (b){
            System.out.println("您的手机号码格式正确");
        }else {
            System.out.println("您的手机号码格式不正确");
        }

    }
//用普通方法去做的:
    private static boolean Judgment(String s) {
        boolean judge=false;
        if (s.startsWith("1")&&s.length()==11&&!(s.charAt(1)==0||s.charAt(1)==1||s.charAt(1)==2)){
            for (int i = 1; i < s.length(); i++) {
               // if (s.charAt(i)>='0'&&s.charAt(i)<='9')//这里可以用这个,当然也可以用新学的,效率还高点
                if (Character.isDigit(s.charAt(i)))//用这个新学的方法就可以
                    judge=true;
//                else {
//                    judge= false;
//                    break;
//                }
            }
        }
        return judge;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值