一、正则表达式
1、概述:是指一个用来描述或者匹配一系列符合某个句法规则的字符串;其实就是一种规则,有自己特殊的应用。
2、正则表达式的组成规则
(1)、字符
表达式 | 代表含义 |
---|---|
x | 字符 x。举例:'a’表示字符a |
\ | 反斜线字符。 |
\n | 新行(换行)符 (’\u000A’) |
\r | 回车符 (’\u000D’) |
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a到 z 或 A到 Z,两头的字母包括在内(范围) |
[0-9] | 0到9的字符都包括 |
. | 任何字符。我的就是.字符本身,怎么表示呢? . |
\d | 数字:[0-9] |
\w | 单词字符:[a-zA-Z_0-9] |
(2)、边界匹配器
表达式 | 代表含义 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界就是不是单词字符的地方。 |
(3)、Greedy 数量词
表达式 | 代表含义 |
---|---|
X? X | 一次或一次也没有 比如""空串 就是没有 |
X* X | 零次或多次 大于等于1次 都算多次 |
X+ X | 一次或多次 |
X{n} X | 恰好 n 次 |
X{n,} X | 至少 n 次 |
X{n,m} X | 至少 n 次,但是不超过 m 次 |
(4)、举例
String regx="abc";//定义正则表达式
regx="\\|"; // \\ 转意字符
regx="[abcdef]"; // 是我这个中括号出现的某一个字符
regx="[12345]";
regx="[12344abcdef]";
regx="[0-9]";
regx="[a-z]";
regx="[A-Z]";
regx="[a-zA-Z0-9]";
regx="[^abc]"; //^ 不是我这个列表里面的一个字符
regx=".."; //匹配单个任意字符
regx="\\.";// \\. 代表点本身
regx="\\d"; //等价于 [0-9]
regx="^\\w$";// 等价于 [a - z_A - Z0 - 9]
//数量词
regx="[a-z]*"; //* 0次或多次 空串 就是0次 1个也算多次
regx="[0-9a-zA-Z]+"; // + 一次 或多次
regx="[a-z]?";//一次 或一次也没有
regx="[a-z]{5}"; //正好几次
regx="[a-z]{5,}"; //至少几次
regx="[a-z]{5,15}";// 大于等与5 小于等于 15
regx = "[1-9][0-9]{4,14}"; //正则表达式 正则表达式的语法
boolean b = "abcd".matches(regx);
3、正则表达式的功能
(1)、判断功能
- public boolean matches(String regex)
public class Test {
public static void main(String[] args) {
//需求:校验邮箱 org cn net com
//[email protected]
//定义邮箱的正则 6 ~18 个字符,可使用字母、数字、下划线,需以字母开头
String emaliRegx="[a-zA-Z]\\w{5,17}@[1-9a-z]{2,16}\\.(com|net|cn|org)";
boolean matches = "[email protected]".matches(emaliRegx);
System.out.println(matches);
}
}
(2)、截取功能
- public String[] split(String regex);
public classTest {
public static void main(String[] args) {
String str="username=张三";
String s = str.substring(0, str.indexOf("="));
System.out.println(s); //username
String substring = str.substring(str.indexOf("=")+1);
System.out.println(substring); //张三
String str2 = "username=|#==@张三=|||#==@password=123456";
String[] strings = str2.split("[=\\|#@]+");
System.out.println(strings[0]); //username
System.out.println(strings[1]); //张三
System.out.println(strings[2]); //password
System.out.println(strings[3]); //123456
}
}
(3)、替换功能
- public String replaceAll(String regex,String replacement)
public class Test {
public static void main(String[] args) {
String s = "我爱学习编程".replace("编程", "java");
System.out.println(s);
String str="我爱==#@@@=学习#===|||java";
String s1 = str.replaceAll("[=#@\\|]+", "");//根据正则替换
System.out.println(s1);
//去掉中间空格
String s2 = "我 爱 学 习 j ava";
String s3 = s2.replaceAll(" +", "");
System.out.println(s3);
}
}
二、System类
1、概述:System 类包含一些有用的类字段和方法。它不能被实例化。
2、成员方法
- public static void gc()//调用垃圾回收器
- public static void exit(int status)//退出java虚拟机 0 为正常退出 非0为 异常退出
- public static long currentTimeMillis()//获取当前时间的毫秒值
in 标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入
- Scanner sc = new Scanner(in);
out “标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出
- PrintStream out = System.out;
3、System类的成员方法使用
public class Test {
public static void main(String[] args) {
//循环耗时
//当前系统的毫秒值,从 1970 01 01 00:00:00 来参照的
long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("循环耗时"+(end-start)+"毫秒");
//获取指定的环境变量值。
String java_home = System.getenv("JAVA_HOME");
System.out.println(java_home);
String path = System.getenv("Path");
System.out.println(path);
}
}
三、BigDecimal类
1、概述:由于在运算的时候,float类型和double很容易丢失精度,所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal。不可变的、任意精度的有符号十进制数。
2、构造方法
- public BigDecimal(String val)
3、成员方法
- public BigDecimal add(BigDecimal augend)//加
- public BigDecimal subtract(BigDecimal subtrahend)//减
- public BigDecimal multiply(BigDecimal multiplicand)//乘
- public BigDecimal divide(BigDecimal divisor)//除法
- public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)//scale 小数点后面保留几位,roundingMode 取舍模式 比如四舍五入
4、BigDecimal类的构造方法和成员方法使用
public class Test {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
BigDecimal add = a.add(b); //加法
BigDecimal subtract = a.subtract(b);//减法
BigDecimal multiply = a.multiply(b);//乘法
//如果不能整除,得指定这个保留的位数,以及取舍模式
BigDecimal divide = a.divide(b,5,BigDecimal.ROUND_CEILING);//除法
System.out.println(add.toString());//13
System.out.println(subtract);//7
System.out.println(multiply);//30
System.out.println(divide);//3.33334
}
}
四、Date类
1、概述:类 Date 表示特定的瞬间,精确到毫秒。
2、构造方法
- public Date()
- public Date(long date) //把一个long类型的毫秒值转换成一个日期对象
3、成员方法
- public long getTime(): 获取一个日期对象对象毫秒值
- public void setTime(long time): 给一个日期对象设置上指定的毫秒值
4、使用举例
public classTest {
public static void main(String[] args) {
Date date = new Date();
long time = date.getTime();//获取系统当前的毫秒值
System.out.println(time);
Date date2 = new Date();
date2.setTime(1000 * 60 * 60 * 24 * 5); //在计算机元年上增加相应的毫秒值
System.out.println(date2);
}
}
五、Calendar类
1、概述:Calendar 类是一个抽象类,不能直接new对象,可以通过他的一个静态成员方法getInstance()来获取他的对象,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
2、成员方法
- public static Calendar getInstance() 使用默认时区和语言环境获得一个日历对象
- public int get(int field) 获得给定日历字段对应的值 field通过Calendar提供的字段来拿
3、add()和set()方法
- public void add(int field,int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
- public final void set(int year,int month,int date) 设置日历时间 年月日
4、Calendar类的方法使用
public class MyDemo2 {
public static void main(String[] args) {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR,-2);
System.out.println(instance.get(Calendar.YEAR));
Calendar instance1 = Calendar.getInstance();
instance1.set(Calendar.YEAR,2016);
System.out.println(instance1.get(Calendar.YEAR));
}
}