Java基础之常用类、正则表达式及枚举

一、常用类

1、Math类

(1)Math类提供了一系列基本数学运算和几何函数的方法。

(2)Math类是final类,并且它的所有成员变量和成员方法都是静态的。


Math类的常用属性和方法

静态常量----PI:圆周率的double值

静态方法


实例:

package common;

public class MathDemo {

	public static void main(String[] args) {
		double powResult = Math.pow(2,3);
		System.out.println("2的3次方:" + powResult);
		System.out.println("8的平方根:" + Math.sqrt(8));
		System.out.println("-9的绝对值:" + Math.abs(-9));
		System.out.println("8.000001向上取整:" + Math.ceil(8.000001));
		System.out.println("9.999999向下取整:" + Math.floor(9.999999));
		System.out.println("5.4999四舍五入的结果:" + Math.round(5.4999));
		System.out.println("8.5001四舍五入的结果:" + Math.round(8.5001));
		System.out.println("随机返回一个从0.0(包括)到1.0(不包括)的值:" + Math.random());
		int ran = (int)(Math.random()*16)+3;
		System.out.println("随机返回3到18的数字:" + ran);
		System.out.println("圆周率是:" + Math.PI);
	}

}

运行结果:

2的3次方:8.0
8的平方根:2.8284271247461903
-9的绝对值:9
8.000001向上取整:9.0
9.999999向下取整:9.0
5.4999四舍五入的结果:5
8.5001四舍五入的结果:9
随机返回一个从0.0(包括)到1.0(不包括)的值:0.8371580065823131
随机返回3到18的数字:5
圆周率是:3.141592653589793


2、Random类

Random类的对象可以生成“伪随机数”。

常用方法:

public int nextInt(int bound)

返回值0(包含0)到bound(不包含)的一个“伪随机整数值”


public boolean nextBoolean()

返回一个“伪随机”的boolean值

实例:

package common;

import java.util.Random;

public class RandomDemo {
	public static void main(String[] args) {
		Random ran = new Random();
		int result = ran.nextInt(16) + 3;
		System.out.println("随机返回3到18的数字:" + result);
		System.out.println("随机返回boolean值:" + ran.nextBoolean());
	}
}

运行结果:

随机返回3到18的数字:6
随机返回boolean值:false


3、System类

(1)成员变量

System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

(2)成员方法

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

参数解释:

src:源数组          srcPos:指定在源数组中的开始位置

dest:目的数组     destPos:目标数组的指定位置          length:要复制的源数组元素的长度(即复制多少个元素)


exit()方法

a:public static void exit(int status)

b:该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面中实现程序的退出功能等。


gc()方法

a:public static void gc()

b:该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。


currentTimeMillis方法

a:public static long currentTimeMillis()

b:以毫秒为单位返回从1970年1月1日午夜到当前时间的毫秒数

实例1:

package common;

public class SystemDemo {
	public static void main(String[] args) {
		System.out.println("正常输出信息...");
		System.err.println("输出标准错误信息...");
		int[] a = {1,2,3,4};
		int[] b = new int[5];
		System.arraycopy(a,1,b,3,2);//数组拷贝
		for(int x : b) {
			System.out.print(x + " ");
		}
		
		System.out.println();
		long startTime = System.currentTimeMillis();
		for (int i = 0; i < 100000000; i++) {
			
		}
		long endTime = System.currentTimeMillis();
		System.out.println("共用时:" + (endTime - startTime) + "毫秒");
		System.exit(0);//正常退出程序
	}
}

运行结果:

正常输出信息...
输出标准错误信息...
0 0 0 2 3 
共用时:4毫秒

实例2:垃圾回收

package common;

public class Person {
	//在对象被JVM的gc收回之前,会先调用这个办法
	@Override
	protected void finalize() throws Throwable {
		System.out.println("对象被收回之前做的事情...");
	}
}
package common;

public class FinalizeDemo {
	public static void main(String[] args) {
		Person per = new Person();
		per = null;//将per引用置为null,使堆内存中的Person对象变为“垃圾”
		System.gc();//显示请求JVM进行垃圾回收
	}
}

运行结果:

对象被收回之前做的事情...


4、Runtime类

(1)作用:使应用程序与其运行的环境相关联

(2)通过使用getRuntime()静态方法获得实例。

        exec(String command)在单独的进程中执行指定的字符串命令,该方法返回Process对象,使用Process对象的destory()方法可以杀掉进程

实例:

package common;

import java.io.IOException;
import java.util.Scanner;

public class RuntimeDemo {
	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();
		rt.gc();//显示请求JVM进行垃圾回收gc
		System.out.println("当前JVM内存总量是:" + rt.totalMemory() + "字节");
		System.out.println("JVM试图使用的最大内存量:" + rt.maxMemory() + "字节");
		System.out.println("当前JVM的空闲内存量:" + rt.freeMemory() + "字节");
		try {
			rt.exec("notepad");//打开记事本
			rt.exec("calc");//打开计算器
			Process qq = rt.exec("D:\\QQ\\Bin\\QQ.exe");//打开QQ进程
			Scanner input = new Scanner(System.in);
			System.out.println("要关闭QQ吗?y/n");
			String choice = input.next();
			if("y".equals(choice)) {
				qq.destroy();//销毁QQ进程
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

运行结果:

当前JVM内存总量是:64487424字节
JVM试图使用的最大内存量:937951232字节
当前JVM的空闲内存量:63505632字节
要关闭QQ吗?y/n

y

打开记事本、计算器和QQ的结果图在这里就不展示了


5、Date类与SimpleDateFormat类

(1)Date类:表示日期和时间

         提供操作日期和时间各组成部分的方法

(2)SimpleDateFormat类

        用于定制日期时间的格式

	Date date = new Date();//创建日期对象
	//定制日期格式
	SimpleDateFormat adf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	String now = sdf.format(date);
	System.out.println(now);

实例:

package common;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(date);
		//传递日期模板,实例化SimpleDateFromat对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss.SSS");
		System.out.println("现在时刻:" + sdf.format(date));
	}
}

运行结果:

Sat Mar 17 21:47:10 CST 2018
现在时刻:2018-03-17 21-47-10.244


6、Calendar类

     抽象类

     用于设置和获取日期/时间数据的特定部分

Calendar类提供了一些方法和静态字段来操作日历

实例:

package common;

import java.util.Calendar;

public class CalendarDemo {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		System.out.println("第几个月:" + (cal.get(Calendar.MONTH) + 1));
		System.out.println("当前月的第 几天:" + cal.get(Calendar.DAY_OF_MONTH));
		System.out.println("星期几:" + (cal.get(Calendar.DAY_OF_WEEK) - 1));
		System.out.println("今年的第几天:" + cal.get(Calendar.DAY_OF_YEAR));
		System.out.println("*************************");
		cal.set(1937,6,7);//调整日历
		System.out.println("第几个月:" + (cal.get(Calendar.MONTH) + 1));
		System.out.println("当月的第几天:" + cal.get(Calendar.DAY_OF_MONTH));
		System.out.println("星期几:" + (cal.get(Calendar.DAY_OF_WEEK) - 1));
		System.out.println("今年的第几天:" + cal.get(Calendar.DAY_OF_YEAR));
	}
}

运行结果:

第几个月:3
当前月的第 几天:17
星期几:6
今年的第几天:76
*************************
第几个月:7
当月的第几天:7
星期几:3
今年的第几天:188


二、正则表达式

1、正则表达式(regex)是使用字符串来描述、匹配一系列符合某个句法规则的字符串

2、用途:

     匹配、切割、替换、获取字符串

3、正则表达式由一些普通字符和一些元字符组成

元字符:指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(位于元字符前面的字符)在目标对象中的出现模式;是一个或一组代替一个或多个字符的字符,如元字符*用来匹配0个或多个的前一字符。

4、常见元字符


实例:

package regex;

import java.util.Scanner;

public class PhoneNumber {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入手机号码:");
		String phone = input.next();
		if(phone.matches("1\\d{10}")) {
			System.out.println("恭喜,手机号码符号要求");
		}else {
			System.out.println("不符合要求!");
		}
	}
}

运行结果:

请输入手机号码:1223131231
不符合要求!


"\"到底是个啥?

在Java中反斜线"\"有三种含义:

1、反斜线后面可以加特定字符,组成所谓的“转义字符”。eg:\n    \t

2、用于取消元字符的意义,使元字符变为普通字符。eg:"\\"代表"\"

3、用于组成正则表达式中的元字符。

eg:"\d"在正则表达式中代表“匹配一个数字字符”。


Pattern类与Matcher类

1、Pattern类与Matcher类都在java.util.regex包中定义。

2、Pattern类的对象代表正则表达式编译之后的对象;Matcher类主要用于执行验证。

3、Pattern类的主要方法:

public static Pattern compile(String regex);

public Matcher matcher(CharSequence input)

Matcher类的主要方法:

public boolean matches();

实例1:

package regex;

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

public class RegexMatch {
	public static void main(String[] args) {
		String birthday = "1996-02-25";
		String regex = "\\d{4}-\\d{2}-\\d{2}";
		Pattern pat = Pattern.compile(regex);//将正则表达式封装到Pattern对象中
		//创建一个匹配器Matcher,该Matcher对象可以根据正则表达式判断传入的字符串是否符合要求
		Matcher mat = pat.matcher(birthday);
		if(mat.matches()) {
			System.out.println("匹配成功!");
		}else {
			System.out.println("匹配失败...");
		}
	}
}

运行结果:

匹配成功!

实例2:

package regex;

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

public class GroupRegex {
	public static void main(String[] args) {
		String str = "abchello123regexhello56789javascriptsahhjhkhkhdhkdsadadhello99rhjbdsdms";
		String regex = "\\w+(hello\\d+)\\w+(hello\\d+)";
		Pattern pat = Pattern.compile(regex);
		Matcher mat = pat.matcher(str);
		
		System.out.println(mat.find());
		System.out.println(mat.group(0));
		System.out.println(mat.group(1));
		System.out.println(mat.group(2));
	}
}

运行结果:

true
abchello123regexhello56789javascriptsahhjhkhkhdhkdsadadhello99
hello56789
hello99


String类对正则表达式的支持

1、public boolean matches(String regex)

判断字符串是否与给定的正则表达式匹配。

2、public String replaceAll(String regex,String replacement)

字符串替换

3、public String[] split(String regex)

字符串拆分

实例:

package regex;

public class StringRegex {
	public static void main(String[] args) {
		String str = "hellojava22regex333python4444C55555";
		if(str.matches("\\w+")) {//验证一个或多个非下划线的单个字符
			System.out.println("匹配成功!");
		}
		//将字符串str中的重复数字用#替换
		System.out.println("替换后的字符串为:" + str.replaceAll("\\d+","#"));
		
		//将字符串拆分后输出
		String country = "中国|美国|俄罗斯|德国";
		String[] array = country.split("\\|");
		for(String c : array) {
			System.out.print(c + " ");
		}
	}
	
	
}

运行结果:

匹配成功!
替换后的字符串为:hellojava#regex#python#C#
中国 美国 俄罗斯 德国 


补充:

1、正则表达式中的问号?有两种作用:

第一种作用:重复前面表达式0次或1次。

第二种作用:在表示次数的元字符后加上?代表取消默认的贪婪匹配模式,变为“非贪婪匹配模式”

贪婪匹配模式:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,

如:String str = "abcfgh";

Pattern p = "ab*h";

贪婪匹配的结果就是:abcfgh(ab*h)

实例:

package regex;

public class GreedyRegex {
	public static void main(String[] args) {
		String str = "abbbbbbbb";
		//"贪婪匹配"
		System.out.println("贪婪模式匹配:" + str.replaceAll("ab+","#"));
		System.out.println("非贪婪模式匹配:" + str.replaceAll("ab+?","#"));
	}
}

运行结果:

贪婪模式匹配:#
非贪婪模式匹配:#bbbbbbb


三、枚举类型

1、枚举类型使用一组常量值来表示特定的数据集合,该集合中数据的数目确定(通常较少),且这些数据只能取预先定义的值。

2、java枚举类型均自动继承java.lang.Enum类(该类继承了Object类)

声明枚举类型:

[public] enum 枚举类型名称{

         枚举对象1,枚举对象2,...,枚举对象n;

}

eg:    public enum Color{

                RED,GREEN,BLUE;

         } 

获取枚举对象的两种方法:

方法一:取得单个枚举对象

             枚举.对象名

方法二:取得全部枚举对象

             枚举.values()

注意:枚举.values()返回的是一个对象数组,可以通过遍历该对象数组获取所有枚举对象。

实例1:

package enumdemo;

public enum SexEnum {
	MALE("我是男生", 1), FEMALE("我是女生", 2);
	private String name;
	private int id;

	private SexEnum() {

	}

	// 枚举类型的构造方法必须是private
	private SexEnum(String name, int id) {
		this.name = name;
		this.id = id;
	}

	// 自定义的方法,通过id查找枚举对象
	public static SexEnum findSexById(int id) {
		for (SexEnum sex : SexEnum.values()) {
			if (sex.id == id) {
				return sex;
			}
		}
		return null;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

}
package enumdemo;

public class TestSex {
	public static void main(String[] args) {
		SexEnum sex = SexEnum.findSexById(1);
		System.out.println(sex);
	}
}

运行结果:

MALE

实例2:

package enumdemo;

public enum ColorEnum {
	RED,YELLOW,BLUE;
}
package enumdemo;

public class TestColor {
	public static void main(String[] args) {
		ColorEnum r = ColorEnum.RED;
		System.out.println(r);
		System.out.println("遍历所有枚举对象:");
		for(ColorEnum c : ColorEnum.values()) {
			System.out.print(c + " ");
		}
	}
}
运行结果:

RED
遍历所有枚举对象:
RED YELLOW BLUE 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值