Java-常用API(一)

目录

Math类

常用方法

System类

计算机中的时间原点

常用方法

Runtime类

常用方法

关于getRuntime()

关于exit()方法

关于exec()方法

Object类

常用方法

关于toString()方法

关于equals()方法

关于clone()方法

浅克隆

深克隆

Objects工具类

常用方法

关于equals()方法

BigInteger类

构造方法

关于valueOf()方法

小结

常用方法

BigDecimal类

构造方法

小结

常用方法

正则表达式

作用

规则

字符类(只匹配一个字符)

预定义字符(只匹配一个字符)

注意

数量词

爬虫

本地爬虫

网络爬虫

带条件爬取

贪婪爬取

正则表达式在字符串方法中的使用

分组

规则

捕获分组

非捕获分组


Math类

常用方法

pubilc static int abs(int a)获取参数绝对值
pubilc static double ceil(double a)向上取整
pubilc static double floor(double a)向下取整
pubilc static int round(float a)四舍五入
pubilc static int max(int a,int b)获取两个int值中的较大值
pubilc static double pow(double a,double b)返回a的b次幂的值
pubilc static double sqrt(double a)返回a的平方根
pubilc static double cbrt(double a)返回a的立方根
pubilc static double random()返回值为double的随机值,范围[0.0,1.0)

System类

计算机中的时间原点

将C语言的生日1970年1月1日00:00:00作为时间远点,由于时差问题,我们国家计算机的时间原点记作1970年1月1日08:00:00。

常用方法

public static void exit(int status)终止当前运行的Java虚拟机
public static long currentTimeMillis()返回当前系统的时间毫秒值形式(从时间原点到现在)
public static void arraycopy(数据源数组,起始索引,目的数组,起始索引,拷贝个数)数组拷贝

Runtime类

常用方法

public static Runtime getRuntime()当前系统的运行环境对象
public void exit(int status)停止虚拟机
public int availableProcessors()获得CPU的线程数
public long maxMemory()JVM能从系统中获取总内存大小(单位byte)
public long totalMemory()JVM已经从系统中获取总内存大小
public long freeMemory()JVM剩余内存大小
public Process exec(String command)运行cmd命令

关于getRuntime()

不能直接通过new来获取Runtime的对象,原因在于Runtime类表示当前虚拟机的运行环境,一个电脑仅有一个运行环境,创建多个对象是没有意义的,所以在Runtime类中创建了唯一一个对象,并通过getRuntime()方法返回。

关于exit()方法

状态码0表示正常停止,非0是异常停止。

System类中的exit()方法的源码实际上就是调用了Runtime类中的exit()方法。

关于exec()方法

要注意并不是所有的命令都可以执行的。

Object类

常用方法

public Object()Object类只有空参构造
public String toString()返回对象的字符串表示形式
public boolean equals(Object obj)比较两个对象是否相等
public Object clone()对象克隆

关于toString()方法

toString()方法返回的形式是“包名.类名@对象地址”,如果想要按自己的想法输出对象的属性值等,则需要在子类中重写toString()方法。

关于equals()方法

equals()方法的源码使用“==”来进行比较的,“==”在引用数据类型中比较的是地址值,只有地址值相等,才会返回true,一般需要重写equals()方法,比较对象内部的属性值。

关于clone()方法

clone()方法会在底层创建一个对象,并把原对象中的数据拷贝过去。由于clone()方法是protected修饰,所以克隆的时候需要重写clone()方法。并且需要让javabean类实现Cloneable接口。

浅克隆

  • 不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来

深克隆

  • 基本数据类型直接拷贝过来
  • 字符串复用
  • 引用数据类型需要再创建一个新的

Objects工具类

常用方法

public static boolean equals(Object a,Object b)

先做非空判断,比较两个对象

public static boolean isNull(Object obj)判断对象是否为null,为null返回true
public static boolean nonNull(Object obj)判断对象是否为null,不为null返回true

关于equals()方法

Objects.equals(s1,s2)中方法的底层会判断s1是否为null,如果为null,则直接返回false,如果不为null,就利用s1再次调用equals方法,这个时候调用的是哪一个equals方法取决于s1的数据类型。

BigInteger类

构造方法

public BigInteger(int num,Random rnd)获取随机大整数,范围是[0~2的num次方-1]
public BigInteger(String val)获取指定大整数,val必须为整数形式
public BigInteger(String val,int radix)获取指定进制的大整数,radix表示进制
public static BigInteger valueOf(long val)静态方法获取BigInteger的对象

关于valueOf()方法

  • 表示范围较小,只能在long的取值范围之内
  • 在内部对常用数字:-16~16进行了优化,提前把他们BigInteger的对象创建好,如果多次获取不会重新创建新的对象

小结

  • 如果BigInteger表示的数字没有超出long的范围,可以用静态方法valueOf获取
  • 如果BigInteger表示的数字超出long的范围,可以用构造方法获取
  • 对象一旦创建,BigInteger内部记录的值不能发生改变
  • 只要进行计算都会产生一个新的BigInteger对象

常用方法

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)除法,获取商和余数
pulic boolean equals(Object x)比较是否相同
public BigInteger pow(int exponent)次幂
public BigInteger max/min(BigInteger val)返回较大/小值
public int intValue(BigInteger val)转为int类型整数

BigDecimal类

构造方法

public BigDecimal(double val)通过传递double类型的小数来创建对象(不精确,不建议使用)
public BigDecimal(String val)通过传递字符串表示的小数来创建对象
public static BigDecimal valueOf(double val)通过静态方法创建对象

小结

  • 如果要表示的数字没有超出double的取值范围,建议使用静态方法
  • 如果要表示的数字超出了double的取值范围,建议使用构造方法
  • 如果传递的是0~10之间的整数,valueOf方法会返回已经创建好的对象,不会重新new

常用方法

public BigDecimal add(BigDecimal val)加法
public BigDecimal subtract(BigDecimal val)减法
public BigDecimal multiply(BigDecimal val)乘法
public BigDecimal divide(BigDecimal val)除法
public BigDecimal divide(BigDecimal val,精确几位,舍入模式)除法

正则表达式

作用

  • 检验字符串是否满足规则
  • 在一段文本当中查找满足要求的内容

规则

字符类(只匹配一个字符)

[abc]只能是a,b或c
[^abc]

除了a,b,c之外的任何字符

[a-zA-Z]a到z,A到Z
[a-d[m-p]]a到d,或m到p
[a-z&&[def]]

a到z和def的交集,实际上就是d,e,f

[a-z&&[^bc]]a到z和非bc的交集
[a-z&&[^m-p]]a到z和除了m到p的交集

预定义字符(只匹配一个字符)

.任何字符
\d一个数字:[0-9]
\D非数字:[^0-9]
\s一个空白字符:[\t\n\x0B\f\r]
\S非空白字符:[^\s]
\w英文、数字、下划线:[a-zA-Z_0-9]
\W一个非单词字符:[^\w]
注意

由于"\"表示转义字符,它的功能是改变后面字符原本的含义,所以在写正则表达式的时候,例如"\d",要写成"\\d",例如"\w",要写成"\\w"。

数量词

X?至多一次
X*零次或多次
X+至少一次
X {n}正好n次
X {n, }至少n次
X {n,m}至少n次,不超过m次

爬虫

本地爬虫

  1. 首先熟悉两个类:Pattern类表示正则表达式,Matcher类表示一个文本匹配器,作用是按照正则表达式的规则去读取字符串,在大串中找到符合规则的子串
  2. 获取正则表达式的对象:Pattern不能直接创建对象,而是要通过compile静态方法来创建
    Pattern p = Pattern.compile("正则表达式");
  3. 获取文本匹配器的对象:
    Matcher m = p.matcher(str);//m要在str中寻找符合p规则的子串
  4. 用m调用find方法:拿着文本匹配器从头开始读取,寻找是否有满足规则的子串。如果没有,则返回false,如果有,返回true,在底层记录子串中的起始索引和结束索引+1
  5. 用m调用group方法:方法底层会根据find方法记录的索引进行字符串的截取,并将子串返回。在这里解释一下find方法记录“结束索引+1”而不是“结束索引”的原因:因为group方法底层进行截取时,实际上运用的subString(起始索引,结束索引)方法,而这个方法的特点是“包头不包尾”,所以就需要在记录的时候往后多记一位。
  6. 最后完善代码:由于文本中不一定只有一段符合规则的子串,所以要将代码写入循环
    while(m.find()) {
        String s = m.group();
        System.out.println(s);
    }

网络爬虫

  1. 创建一个url对象:

    URL url = new URL("网址");
  2. 连接这个网址:

    URLConnection conn = url.openConnection();
  3. 创建一个对象去读取网站中的数据:

    BufferReader br = new BufferReader(new InputStreamReader(conn.getInputStream()));
  4. 最后按照本地爬虫的方式进行爬取

带条件爬取

在定义正则表达式的时候与前面稍有不同,其他的步骤都一样。

  • “?=”:?是占位的意思,代表前面的数据,=表示后面跟随的数据,匹配后只输出?所代表的数据
  • “?:”:意思同上,区别在于:是匹配后输出整体数据
  • “?!”:!表示去除后面数据,只匹配没有后面数据的子串

贪婪爬取

贪婪爬取是指在爬取的时候尽可能多的获取数据。而非贪婪爬取则与之相反,是指在爬取的时候尽可能少的获取数据。Java中默认的就是贪婪爬取。

只写+或*表示贪婪爬取,在后面加上?则表示非贪婪爬取。

正则表达式在字符串方法中的使用

public String[] matches(String regex)判断字符串是否满足正则表达式的规则
public String replaceAll(String regex, String newStr)按照正则表达式的规则进行替换
public String[] split(String regex)按照正则表达式的规则切割字符串

分组

规则

分组就是一个小括号()。每组是有组号的,从1开始,连续不间断递增。以左括号为基准,最左边为第一组,以此类推,要注意的是,只看左括号,不看其他。

捕获分组

捕获分组就是把这一组的数据捕获出来,再用一次。书写代码的时候,如果是在正则表达式内部重复使用一组数据,则使用“\\组号”,如果是在外部使用,则使用“$组号”。

非捕获分组

非捕获分组是分组之后不再使用本组数据,仅仅是把数据括起来,即就是上面带条件爬取的形式。非捕获分组不占用组号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值