java项目总结4

目录

1.正则表达式

2.爬虫

3.时间

4.包装类

5.工具类之Arrays

6.Lambda        


1.正则表达式

用于验证字符串是否满足自己所需要的规则。方法:matches

注意:\在Java中有特殊涵义,是将其它的意思本来化,假设"是用来引用字符串的,但是你如果想要输出它,那是不是就变成了System.out.println(""");那很明显会报错,这需要加上\就行了,将"的意思本来化,就变成了普普通通的"了。正确形式System.out.println("\"");所有在使用上面的\d,\D,\s等等的时候就需要在它前面加上\。

public class aaa2 {
    public static void main(String[] args) {
        String r="2161672768";
        //qq号是9位到10位的,第一个不为0
        System.out.println(r.matches("[0-9]\\d{8,9}"));
    }
}

这里的{8,9}表示字符串的后面8个或者9个,也指前面的//d只能出现8次或者9次,因为前面的判断第一个是不是0,用掉了一个字符(【0-9】);

注意:matches(),括号里面的字符串,当然也可以这样。

public class aaa2 {
    public static void main(String[] args) {
        String r="2161672768";
       //qq号是9位到10位的,第一个不为0
//        System.out.println(r.matches("[0-9]\\d{8,9}"));
        String e="[0-9]\\d{8,9}";
        System.out.println(r.matches(e));
    }
}

2.爬虫

搜索关键词或者关键句。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class aaa2 {
    public static void main(String[] args) {
        //有如下文本,请按照要求爬取数据。
        String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,"
                + "因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
        //1.获取正则表达式的对象
        Pattern p = Pattern.compile("Java\\d{0,2}");//找java,java后面可以有0到2个数字
        //2.获取文本匹配器的对象,m:文本匹配器的对象,str:大串,p:规则,m要在str中找符合p规则的小串
        // 拿着m去读取str,找符合p规则的子串
        Matcher m = p.matcher(str);
        //3.利用循环获取
        while (m.find()) {
            String s = m.group();
            System.out.println(s);
        }
    }
}

结果如下:

拓展1:我们爬虫要爬的数据一般不止一个,matches有很好的解决方法。假设我们要爬虫java\\d{0,2}和c++\\d{0,2}怎么办呢

可以将String r="(java\\d{0,2})|(c++\\d{0,2})",没错中间的|就是你想的那样,类似c的||(或者)功能,在该方法中同样试用。(只有一条|)

拓展2(需求1):String r="java(?=8|11|17)"

?表示java,=表示java后面是否有8或者11或者17,有就爬取,但是这里打印的时候不会将后面的数字打印出来,只会打印java,方式跟之前的一样,只不过规则的字符串变了。

还有将r="((?i)java)(?=8|11|17)"表示忽略java的大小写进行爬取。

拓展3(需求2):String r="((?i)java)(8|11|17)"或者String r="((?i)java)(?:8|11|17)"

拓展4(需求3)String r="((?i)java)(?!8|11|17)

拓展5:贪婪和非贪婪爬取

拓展6:捕获分组和非捕获分组

3.时间

获取当前时间:Date r=new Date();   long time =r.getTime(); 计算现在距离起始时间过了多少毫秒

修改距离起始时间的毫秒值   r.setTime(毫秒值);         

long的通常要加上大写或者小写的l,L更加显眼。

该方法打印结果如下:

修改后可运用到项目的如下;(默认)

日期的相关标识符:

自定义时间格式如下:

字符串设置时间格式:(方法中的格式要更字符串一样否则会报错)

4.包装类

包装类(Wrapper Class)在Java中是一种特殊的类,它们用来将基本数据类型包装成对象。主要的包装类有 IntegerLongFloatDoubleBooleanCharacterByteShort,分别对应基本数据类型int,long,float,double,boolean,char,byte,short。在后序的集合和Map中有相关例子。

作用:

1.将基本数据类型转换为对象

2.提供了方法来操作基本数据类型

3.支持泛型编程

4.提供了常量和静态方法

5.实现了一些接口

6.自动装箱和拆箱

装箱指将基本数据类型转换成包装对象,拆箱指将包装对象转换成基本数据练习。自动指他们创建出来后,在使用时,底层逻辑会自动转化,不需要自己手动转化。

5.工具类之Arrays

6.Lambda        

Lambda 表达式使得 Java 语言在编程风格上更加现代化和函数式,提升了代码的简洁性、可读性和并行处理的能力,是 Java 8 版本中一个重要的语言特性。

注意:

1.Lambda表达式可以用来简化匿名内部类的书写

2.Lambda表达式只能简化函数式接口的匿名内部类的写法

3.函数式接口:有且仅有有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注解

Lambda的简写例子如下:

import java.util.Arrays;
import java.util.Comparator;

public class test {
    public static void main(String[] args) {
        //初识lambda表达式
        Integer[] arr1 = {3, 8, 5, 7, 9, 1, 4, 2};
        Integer[] arr2 = {3, 8, 5, 7, 9, 1, 4, 2};

        Arrays.sort(arr1,new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(arr1));

        Arrays.sort(arr1, (Integer o1, Integer o2) -> {
                    return o1 - o2;
                }
        );

        System.out.println(Arrays.toString(arr1));

        Arrays.sort(arr2, (o1, o2) -> o1 - o2);

        System.out.println(Arrays.toString(arr2));
        
    }
}

结果如下:

为了保证Lambda表达式的目标类型是一个明确的函数式接口,有如下三种常用方式;

1.将Lambda表达式赋值给函数式接口类型的变量。

2.将Lambda表达式作为函数式接口类型的参数传给某个方法。

3.使用函数式接口等Lambda表达式进行强制转换。

可以运行:

//Ring接口中只包含一个无参数的方法
//Lambda表达式代表的匿名方法实现了Ring接口唯一的,无参数的方法
//因此下面的Lambda表达式创建了一个Ring的对象
Ring r=()->{
for(int i=0;i<=100;i++)
System.out.println();
}

无法运行:


Objext r=()->{
for(int i=0;i<=100;i++)
System.out.println();
}

因为Object不是函数式接口,想要强制转换,前提是他们类型一直,如参数, 返回值


Object r=(Ring)()->{
for(int i=0;i<=100;i++)
System.out.println();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值