System类代表系统,系统级的很多属性和成员方法都放置在该类的内部,该类位于java.lang包
@Test
public void test3() {
String javaVersion = System.getProperty("java.version");
System.out.println("java的version = " + javaVersion);
String javaHome = System.getProperty("java.Home");
System.out.println("java的Home = " + javaHome);
String osName = System.getProperty("os.Name");
System.out.println("osName = " + osName);
String osVersion = System.getProperty("os.version");
System.out.println("os的version:" + osVersion);
String userName = System.getProperty("user.name");
System.out.println("user的name:" + userName);
String userHome = System.getProperty("user.home");
System.out.println("user的home:" + userHome);
String userDir = System.getProperty("user.dir");
System.out.println("user的dir:" + userDir);
}
public void addShutdownHook(Thread hook)
捕获JVM推出时间
用法:
public class test3 {
public static void main(String[] args) throws InterruptedException {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("捕获JVM退出,释放资源");//在jvm关闭前,要做一些事
}
}));
System.out.println("abc");
Thread.sleep(2000);
try{
int i = 1 /0;
}catch (Exception e){
e.printStackTrace();
}
System.out.println("abc");
System.out.println("-------------------");
}
}
运行结果
abc
123
abc
123
java.lang.ArithmeticException: / by zero
at test1.test3.main(test3.java:21)
abc
123
abc
123
abc
-------------------
捕获JVM退出,释放资源
Integer类作为int的包装类,能存储的最大整数为2的31次方-1,long类也是有限的。
BigInteger可以表示不可变的任意精度的整数,具体用法如下
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
Integer i1 =2147483647;
// Integer i2 =2147483648; 超过了integer类的最大限度
BigInteger i3 = new BigInteger("15");
System.out.println(i3);
BigInteger i4 = new BigInteger("5");
BigInteger i5 = i3.add(i4);
System.out.println(i5);
BigInteger[] arrs = i3.divideAndRemainder(new BigInteger("7"));//将除数和余数存放在数组中
System.out.println(Arrays.toString(arrs));
}
正则表达式,又称为规则表达式,在代码中常简写为regex
是一种文本模式,包括普通字符特殊字符,是计算机科学的一个概念,正则表达式使用单个字符串来描写、匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本
在线工具
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入qq号");
String s1 = scanner.next();
System.out.println(s1.matches("[0-9]{6,12}") == true);
}
}
运行结果
请输入qq号
2941588509
true
请输入qq号
@Test
public void test2() {
String s = "Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言Java 可运行于多个平台,
如 windows,Mac OS 及其他多种 UNIX 版本的系统";
s = s.replaceAll("[a-zA-Z]+","hello");
s = s.replaceAll("\\d+","world");
System.out.println(s);
}
运行结果
hello 是由 hello hello 公司于 world 年 world 月推出的高级程序设计语言hello 可运行于多个平台,
如 hello,hello hello 及其他多种 hello 版本的系统
@Test
public void test4(){
String s1 = "aaa,bbb,123,456,hello,word";
String[] arr = s1.split(",");
System.out.println(Arrays.toString(arr));
}
运行结果
[aaa, bbb, 123, 456, hello, word]
@Test
public void test5(){
String s1 = "hello12333world4567welcome34to4beijing";
String[] arr = s1.split("\\d+");
System.out.println(Arrays.toString(arr));
}
运行结果
[hello, world, welcome, to, beijing]
Pattern对象是一个正则表达式的编译表示,Pattern类没有公共构造方法,要创建一个Pattern对象,你必须首先调用其公共静态编译方法,他返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
compile()
通过正则得到一个Patternmatchers()
方便正则表达式只是用一次,进行匹配matcher()
产生Matcher对象,多次正则匹配推荐使用Matcher 对象是对输入字符串进行解释和匹配操作的引擎。于Pattern类一样,Matcher也没有公共的构造方法,需要使用Pattern对象的matcher方法获得一个Matcher类的对象
常用的方法
public int start()
返回以前匹配的初始索引public int start(int group)
返回以前匹配的初始索引,给定组所捕获的子序列的初始索引public int end()
返回最后匹配字符之后的偏移量。public int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。public boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。public boolean matches()
尝试将整个区域与模式匹配。group()
返回上一个匹配项匹配的输入子序列。group(int group)
返回上一个匹配操作期间给定组捕获的输入子序列。public Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤。public StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤。public class Test2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Pattern pattern = Pattern.compile("\\d{5,12}");//正则的编译对象
while (true) {
System.out.println("请输入qq号");
String s1 = scanner.next();
Matcher matcher = pattern.matcher(s1);
System.out.println(matcher.matches());//全部匹配
}
}
请输入qq号
2941588509
true
请输入qq号
@Test
public void test1() {
//只匹配一次可以的使用matches
System.out.println(Pattern.matches("\\d{5,12}", "12345678"));//全都匹配
//正则式多次匹配
Pattern pattern = Pattern.compile("\\d{5,12}");//速度较快
pattern.matcher("12345678").matches();
}
@Test
public void test3() {
Pattern pattern = Pattern.compile("\\d{5,12}");
Matcher m = pattern.matcher("12345a3232323");
System.out.println(m.matches());//需要全部匹配成功才是正确
// m.reset();
Matcher m1 = pattern.matcher("12345a3434343abc676776"); //非全部匹配
while (m1.find()) {//查找匹配,如果匹配成功返回true
String target = m1.group();//得到上一次匹配成功的子序列
System.out.println(target + ":" + m1.start() + "-" + m1.end());
}
}
false
12345:0-5
3434343:6-13
676776:16-22
@Test
public void test5() {
String content = "Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。\n"
+ "Java 可运行于多个平台,如 windows,Mac OS 及其他多种 UNIX 版本的系统。\n"
+ "本教程通过简单的实例将让大家更好的了解 Java 编程语言。\n"
+ "移动操作系统 Android 大部分的代码采用 Java 编程语言编程。";
Pattern pattern = Pattern.compile("([a-zA-Z]+) | (\\d+)");
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
String str = matcher.group(0);//0:全部的正则捕获组,1:的一个小括号的正则子组里的第一个
System.out.println(str);
}
}
Java
Sun
Microsystems
1995
5
Java
Mac
OS
UNIX
Java
Android
Java
@Test
public void test6(){
String content = "Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。\n"
+ "Java 可运行于多个平台,如 windows,Mac OS 及其他多种 UNIX 版本的系统。\n"
+ "本教程通过简单的实例将让大家更好的了解 Java 编程语言。\n"
+ "移动操作系统 Android 大部分的代码采用 Java 编程语言编程。";
Pattern pattern = Pattern.compile("Java");
Matcher matcher = pattern.matcher(content);
StringBuffer sb = new StringBuffer();
while (matcher.find()){
matcher.appendReplacement(sb,"java");
System.out.println("sb:" + sb);
System.out.println("====分隔符======");
}
matcher.appendTail(sb);
System.out.println("sb:" + sb);
}
sb:java
====分隔符======
sb:java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
java
====分隔符======
sb:java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
java 可运行于多个平台,如 windows,Mac OS 及其他多种 UNIX 版本的系统。
本教程通过简单的实例将让大家更好的了解 java
====分隔符======
sb:java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
java 可运行于多个平台,如 windows,Mac OS 及其他多种 UNIX 版本的系统。
本教程通过简单的实例将让大家更好的了解 java 编程语言。
移动操作系统 Android 大部分的代码采用 java
====分隔符======
sb:java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
java 可运行于多个平台,如 windows,Mac OS 及其他多种 UNIX 版本的系统。
本教程通过简单的实例将让大家更好的了解 java 编程语言。
移动操作系统 Android 大部分的代码采用 java 编程语言编程。
转义号:\\
一般用两个
需要用到转义号的有:. * + ( )$ / \ ? [ ] ^ { }
特殊字符
$ 匹配一行的结尾。要匹配 $ 字符本身,请使用\$
^ 匹配一行的开头。要匹配 ^ 字符本身,请使用\^
() 标记子表达式的开始和结束位置。要匹配这些字符,请使用\(和\)
[] 用于确定中括号表达式的开始和结束位置。要匹配这些字符,请使用\[和\]
{} 用于标记前面子表达式的出现频度。要匹配这些字符,请使用\{和\}
* 指定前面子表达式可以出现零次或多次。要匹配 * 字符本身,请使用\*
+ 指定前面子表达式可以出现一次或多次。要匹配 + 字符本身,请使用\+
? 指定前面子表达式可以出现零次或一次。要匹配 ?字符本身,请使用\?
. 匹配除换行符\n之外的任何单字符。要匹配.字符本身,请使用\.
\ 用于转义下一个字符,或指定八进制、十六进制字符。如果需匹配\字符,请用\\
| 指定两项之间任选一项。如果要匹配丨字符本身,请使用\
预定义字符
. 可以匹配任何字符
\d 匹配 0~9 的所有数字
\D 匹配非数字
\s 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S 匹配所有的非空白字符
\w 匹配所有的单词字符,包括 0~9 所有数字、26 个英文字母和下画线_
\W 匹配所有的非单词字符
正则表达式的整体为0,然后从左侧开始数,第一个括号为1,的二个括号为2,然后再看括号里有没有小括号。
对于字符串 2017-04-25 表达式为:(\d{4})-((\d{2})-(\d{2}))
有四个括号,编号如下
编号 捕获组 匹配
0 (\d{4})-((\d{2})-(\d{2})) 2017-04-25
1 (\d{4}) 2017
2 ((\d{2})-(\d{2})) 04-25
3 (\d{2}) 04
4 (\d{2}) 25
应用场景:类的对象只有有限个,确定的。枚举可以看成一个类如:
Enum类的主要方法:
values()
返回枚举对象类的数组,可很方便地遍历所有枚举值valueOf(String str)
可以把一个字符串转为对应发枚举类对象,要求字符串必须是枚举类对象的名字。toString()
返回当前枚举类对象常量的名称public class Test2 {
public static void main(String[] args) {
OrderState[] orderState = OrderState.values();
for (int i = 0; i < orderState.length; i++) {
// System.out.println( orderState[i].getValue() );
System.out.println( orderState[i] +" 状态编号:" + orderState[i].getStateID() + " 内容为:" + orderState[i].getValue());
}
}
enum OrderState {//订单状态
NON_PAYMENT(1, "未付款"), // 等价于 static OrderState NON_PAYMENT = new OrderState(1,"未付款")
PAID(2, "已付款"),
DELIVERED(3, "已发货"),
RETURN(4, "退货"),
CHECKED(5, "已确认"),
FULFILLED(6, "已配货");
private String value;
private int stateID;
OrderState() {
}
OrderState(int stateID, String value) {
this.value = value;
this.stateID = stateID;
}
public String getValue() {
return value;
}
public int getStateID() {
return stateID;
}
}
}