JAVA11
正则表达式
l 概念
- 是一个字符串
- 满足一定的规则
- qq号码检查
[1-9] [0-9] [4,9]
- 检查某些字符是否合规 例如 用户名是否合规
- 一个[]代表一个或者多个字符
- 为了解决String处理一些问题的太复杂
l 匹配规则
- 字符x
a) 需要匹配的内容是a
- 字符 \\
a) 代表 \
b) 是转义字符
- \t 制表符
- \n 换行符 新增一空行
- \r 回车符 光标到下一行的首部
- [abc] 代表一个字符范围
- [^abc] 代表取反的一个范围 不是abc就匹配
- [a-zA-Z] 任意一个字母
- [0-9] 任意一个数字
- [a-z A-Z _ 0-9 ] 字母 下划线 和数字都匹配
- \d 代表数字 0-9
- \w 代表字母 下划线 和数字都匹配
- ^ 代表是行的开头
a) ^[abc][0-9]$ 需要匹配的内容从[abc]这个位置开始 相当于左双引号
- $ 代表是行的结尾
a) ^[abc][0-9]$ 需要匹配的内容以[0-9]这个位置结束 相当于右双引号
- \b 单词边界
需要某个字符两边需要是非单词字符 数字 字母 下划线
- X ? 代表 x出现一次或者一次也没有
- X * 代表出现零次 或者多次
- X + 代表出现一次或者多次
- X{n}代表出现n次
- X{n,}代表出现至少n次
- X{n,m}代表出现至少n次但不超过m次
l 使用
- String类的matches
返回值是boolean
“abc”.matches(“[a]”)
- String类的方法split
返回值是 String[]
使用规则将字符串进行切割
“abc”.split(“a”);
- String类的方法replaceAll
返回值是String
按照规则特换字符串
“abc0123”.reaplceAll(“[\\d]”,”#”)
把所有数字替换为#
- “ . ”表示任意字符
- “\\d+” 整数
- “\\d+\\.\\d+” 正小数
- “-\\d+” 负整数
- “-\\d+\\.\\d+” 负小数
- “\\d+\\.\d{2}” 保留两位小数的正数
- “\\d+\\.\d{1,3}” 保留1-3位小数的正数
Date类
l 概述
- 表示特定的瞬间 精确到毫秒
- 以实现的接口
- 已有的子类
- 包名是Java.util.Date
- 毫秒 1000毫秒=1秒
- long time=System.currentTimeMillis();
- 返回Long型 因为超过了int的范围
- 时间原点 零点 公元1970年1月1日 午夜0:00:00:
- 时间和日期的计算 必须依赖毫秒值
l 构造方法
- 已过时 从jdk1.1 被日历类取代
- 除了 date(); date(long date)
- date()输出不是对象地址 说明重写了toString方法
Sat Jul 15 10:58:26 CST 2017 当前操作系统中的时间
- date(long date)
传递一个毫秒值
变成和零点相加的日期
- Date get set方法
getTime() 将日期转为毫秒值 long time=System.currentTimeMillis()也可以
setTime() 将毫秒值转为日期 构造方法也可以
l 日期格式化
- DateFormat
- 日期格式化的抽象类
- java.text包
- 抽象方法和非抽象方法都有
- SimpleDateFormat子类可以实现抽象方法 可以直接使用非抽象方法
- 创建SimpleDateFormat对象
构造方法中写去日期格式
yyyy 年份
MM 月份
dd 月中的天数
HH 0-23小时
mm 小时中的分钟
ss 秒
new SimpleDateFormat("公元yyyy年MM月dd日m分钟ss秒");
汉字可以所以写但字母必须按要求写
然后调用format()方法 返回值是String 参数是一个date
l String转为date对象
- Parse方法
- 步骤
a) 创建SimpleDateFormat对象
b) 构造方法指定日期格式
c) 子类对象 调用方法parse 传递String 返回Date
d) Parse中的字符串日期必须和指定的格式相同
e) 日期不能输入 只能选择
Calendar
l 概念
- 替换了date方法
- 为抽象类 不能创建对象 需要子类实现
- 静态方法 静态变量 YEAR 日历字段
- getInstance ()获得子类对象
l get 获取日历字段的值
get(int)
参数int获取哪个日历字段的具体数值
返回 int值
int year=calendar.get(calendar.YEAR);
年 YEAR
月份 MONTH
天数 DATE_OF_MOUTH
l set(int field,int value)
设置日历哪个日历字段 具体数值
set(int year,int month,int day)
传递3个整数的年月日
外国月份比国内少一月
l add(int 字段,int 偏移量)
日历的偏移量可以指定哪个一个日历中的字段,进行整数的偏移
l getTime() 不常用
将日历对象转为日期对象
练习
l 活了多少年
l 闰年
- 将日历指定到3月1日,add偏移一天 29 闰年 28平年
l Java日历
包装类
概述
- 基本类型有八种 数学计算
- 基本类型进行复杂操作功能不够 需要扩充
- 包装类解决了这个问题
- 用户从界面输入的任何数据都是以字符串进行储存
- 对这些字符串进行操作只能进行字符串操作 无法转换为基本类型完成运算
- Java提供了八种基本类型的包装类
每一个类中都封装了一个基本类型 从而来操作更多数据
除了int 是iteger char是character 其他都是首字母大写
- 主要学习integer,其他类和integer类差不多
- 在Java.lang包中
特点
l parseInt(String a)
- 在基本数据类型和字符串之间进行切换
- parseInt(String a)
- 将字符串解析为有符号的int整数
- 只能写数字不能加空格
l parseInt(String s,int radix)
- 把其他进制数转换为十进制
- 前面的进制数和后面的进制必须相对应
- 可以写ABCDEF 16进制
l 将基本类型变为字符串
- 数据类型变量+“”
- Integer 静态方法 toString
- toString(String s,int radix) 以规定进制输出 最高支持36进制 0-9 A-Z
l 构造方法
- Integer(String s) 创建一个Interger对象 包含的是字符串
- 非静态方法intValue() 返回int类型 将此字符串转为基本数据类型
l 其他方法
- 三个方法 和 两个静态的成员变量
- MAX_VALUE 基本数据类型取值最大值
- MIN_ALUE 基本数据类型取值最小值
- toBinarString(int) 十进制转为二进制 返回String
- toOctalString(int) 十进制转为八进制
- toHexString(int) 十进制转为十六进制
自动装箱和自动拆箱
l jdk1.5后
数据类型变为对象 自动装箱
对象中的数据变回基本数据类型 自动拆箱
l 自动装箱
- Integer in=1;
打印后为字符串 1
例如集合ArrayList<Integer> 可以存储1
- In=in+1
In首先in.inValue()转为基本类型
然后in+1
之后in在转为包装类
l 弊端
空指针异常
如果是in是null的话,编译没错但是运行会出错
l 练习
System类
l Java.lang 包
l Final类
l 构造方法私有 外界不能直接建立对象
l 可以用类名访问静态方法
l 方法
- currentTimeMills()
a) 获得当前系统时间
b) 可以在程序运行前后各调用一次用来进行统计程序执行时间
- exit()
a) 虚拟机退出就会停止运行程序
b) 退出虚拟机
c) 用参数作为状态码 0表示正常终止 1表示异常终止
- gc()
a) 回收垃圾
b) 比如匿名对象等
c) 在对象类 重写 finalize()方法可以输出语句
- getProperties()
getProperties(String key)
a) 获取当前操作系统的属性
b) 返回Properties 集合中的一个类 和ArrayList差不多
c) 输出getProperties()就可以得到所有信息
d) file.separator 系统的文件位置符号 例如 windows \ unix
是/
- arrayCopy
a) 可变数组ArratList StringBuffer的原理都是用了这个
b) 源码 没有
c) 复制替换
d) 是调用windows的本地方法 JVM内存中有一部分是本地方法栈 这方法运行时就是在本地方方法栈中
Math类
概念
l 数学计算的类
l 工具类
l 平方根 对数 指数 三角函数
l Java.lang包中
l 静态方法
方法
l static int abs(int i )
- 获取参数的绝对值
- Math.abs(int a)
- 浮点 long都可以
l static double ceil(double d)
- 返回大于或者等于d的最小整数
- Math.cell()
l static double floor(double d)
- 返回小于或者等于d的最大整数
- Math.floor()
l static double pow(double a, double a,)
- 返回a的b次方
- Math.pow(2,3) 2的3次方
l static double sqrt(double d)
- 返回double参数的平方根
- 如果是负数-2 会输出Nan
- 本地方法
l static double random(double d)
- 来源Random类
- 返回一个0.0-1.0之间的一个随机数
- 不推荐用
l static double round(double d)
- 获取参数的四舍五入 取整数
- 怎么自己实现 +0.5 强转int 在转为double
Arrays工具类
概念
l 包含操作数组的内容
l Java.Util
l 包括排序 查找
方法
l static void sort(数组)
- 对数组进行升序排列
- 排序算法是经过优化的的快速排序
l static int binarySearch(数组,被查找的元素)
- 数组的二分搜索法
- 返回元素在数组中的出现的索引
- 如果元素不存在返回得是 (- 插入点-1)
a) 保证有序放到元素的中
b) -索引 -1
l static String toString(数组)
- 将数组变为字符串
- 并且 有一定格式
- 原理 StringBuilder 之前写过的按照一定格式输出数组
练习
l 接收输入存储十个人的成绩
l 将最后三个人存入新的数组
l 返回新的数组
l 程序分析
- main方法传过来一个数组
- 用sort方法进行排序
- 新建一个数组
- 用arraycopy将传过来的数组的前三个元素复制到新数组
- 返回这数组
- Main接收这个数组
- 用toString输出
- 也可以用for循环遍历输出和取出前三个元素 但是比较麻烦
BigInteger
概念引入
l Long型是最大的整数
l 超过long型的基本类型不能表示
l 变为BigInteger的对象
l 实现大数据的运算
l Java.math
构造方法
l 可以传递 字节数组 整型 有局限性
l 选择传递String 可以表示任意大小的整数
l BigInteger(String s) 是一个对象
运算
l 可以进行四则运算
- 调用方运算
- 计算结果只能还是BigInteger对象
l 加法 add(另一个BigInteger对象)
- 结果还是一个对象
l 减法 subtract(另一个BigInteger对象)
结果还是一个对象
l 乘法 multiply(另一个BigInteger对象)
结果还是一个对象
l 除法 divied(另一个BigInteger对象)
结果还是一个对象
BigDeciaml
概述
- 0.09+0.01=0.09999999999999
l 无限接近0.1
- 原因 计算机计算二进制中表示浮点数不精确
- 超级大数浮点运算 提高运算精度
- Java.math
构造方法
l 建议用String进行传递参数
l Int和double 可能回超出 不可预知性
运算
l 加减乘
- 加法
a) add
b) 精确计算
- 减法
a) Subtract
b) 精确计算
- 乘法
c) Multiply
d) 精确计算
- 结果
0.1 0.68 101.5
l 除法 提现高精度
- 除法 divied
- 结果
1.301/100
0.01301
1.301/101
报异常 无限不循环
- 解决办法:重载
a) 保留模式
阅读API文档
.ROUND_UP 向上一位加1
.ROUND_DOWN 截断
.ROUND_HALF_UP 四舍五入
.ROUND_HALF_DOWN 四舍(大于0.5五)入