天天看点

黑马程序员——常用API——Math,System,Calendar,正则表达式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.Math类

1.针对数学运算进行操作的类

属于lang包,全静态,无构造方法.

2.常见方法

A:绝对值 public static int abs(int a)

B:向上取整 public static double ceil(double a)

C:向下取整 public static double floor(double a)

D:两个数据中的大值 public static int max(int a,int b)

E:a的b次幂 public static double pow(double a,double b)

F:随机数 public static double random()

G:四舍五入 public static int round(double a)

H:正平方根 public static double sqrt(double a)

二.Random类

1.用于产生伪随机数的类

2.构造方法:

A:Random() 随机种子,每次产生的随机数不同

B:Random(long seed) 指定种子,每次种子相同,随机数就相同

3.成员方法:

A:public int nextInt() 返回int范围内的随机数

B:public int nextInt(int n) 返回[0,n)范围内的随机数

练习题:求50-100之间的随机数

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;


import java.util.Random;


public class Demo {
	public static void main(String[] args) {
		Random r= new Random();
		
		for (int i = 0; i < 50; i++) {
			int nextInt=r.nextInt(50);
			if(nextInt==0){
				nextInt += 50;
			}else{
				 nextInt += 51;


			}
			System.out.println(nextInt);
		}
		
	}
}</span></strong></span>
           

三.System类

1.系统类

属于lang包,全静态,无构造方法,提供了一些有用的字段和方法

2.成员方法

A:运行垃圾回收器 

public static void gc()

B:退出jvm

public static void exit(int status) 

int值为0表示正常退出,为其他值表示异常退出

C:获取当前时间的毫秒值

public static long currentTimeMillis()

D:数组复制

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

src - 源数组。

srcPos  - 源数组中的起始位置。

dest - 目标数组。

destPos - 目标数据中的起始位置。

length  - 要复制的数组元素的数量。 

练习:

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;


public class Demo1 {


	
	public static void main(String[] args) {
		//获取当前时刻的毫秒值
		long currentTimeMillis = System.currentTimeMillis();
		System.out.println(currentTimeMillis);
		//数组复制
		int[] arr1={1,1,1,1,1};
		int[] arr2={2,2,2,2,2};
		System.arraycopy(arr1, 0, arr2, 2, 3);
		for (int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]+" ");
		}
		//运行垃圾回收器
		System.gc();
	}


}
</span></strong></span>
           

四.BigInteger类

1.针对大型整数的运算

2.构造方法

A:BigInteger(String s)

3.成员方法

A:加 public BigInteger add(BigInteger val)

B:减 public BigInteger subtract(BigInteger val)

C:乘 public BigInteger multiply(BigInteger val)

D:除 public BigInteger divide(BigInteger val)

E:商和余数 public BigInteger[] divideAndRemainder(BigInteger val)

练习:

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;


import java.math.BigInteger;


public class Demo2 {


	/**
	 * public BigInteger[] divideAndRemainder(BigInteger val)
	 */
	public static void main(String[] args) {
		//商和余数的运算
		BigInteger bi= new BigInteger("25");
		BigInteger bi2= new BigInteger("4");
		BigInteger[] bi3= bi.divideAndRemainder(bi2);
		for (int i = 0; i < bi3.length; i++) {
			System.out.println(bi3[i]);
		}
		
	}


}

</span></strong></span>
           

五.BigDecimal类

1.浮点数据做运算,会丢失精度。java为我们提供了BigDecimal.

2.构造方法

A:BigDecimal(String s)

3.成员方法:

A:加 public BigDecimal add(BigDecimal augend)

B:减 public BigDecimal subtract(BigDecimal subtrahend)

C:乘 public BigDecimal multiply(BigDecimal multiplicand)

D:除 public BigDecimal divide(BigDecimal divisor)

练习:

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.day14;


import java.math.BigDecimal;


public class Big {


	
	public static void main(String[] args) {
		//定义BigDecimal值两个
		BigDecimal bi = new BigDecimal("222222");
		BigDecimal bigDecimal = new BigDecimal("111111");
		//对BigDecimal进行加法操作
		BigDecimal bigDecimal2 = bi.add(bigDecimal);
		//对BigDecimal进行除法操作
		BigDecimal bigDecimal3 = bi.divide(bigDecimal);
		//对BigDecimal进行减法操作
		BigDecimal bigDecimal4 = bi.subtract(bigDecimal);
		//对BigDecimal进行乘法操作
		BigDecimal bigDecimal5 = bi.multiply(bigDecimal);
		//输出结果
		System.out.println(bigDecimal2);
		System.out.println(bigDecimal3);
		System.out.println(bigDecimal4);
		System.out.println(bigDecimal5);


	}


}
</span></strong></span>
           

六.Date类与DateFormat类

1.Date是日期类,精确到毫秒.

毫秒代表的是距1970年1月1日00时00分00秒的时间.

A:构造方法

Date()

Date(long time)long time 为毫秒数

B:成员方法

public long getTime()

获取定义时间的毫秒数

public void setTime(long time)

设置毫秒值

C:日期和毫秒值的相互转换

a:Date>>long time

Date now =new Date();

long time1=now.getTime();

b:long time>>Date

直接通过构造方法

Date now =new Date(long time);

2.DateFormat是针对日期进行格式化和针对字符串进行解析的类,并且是抽象类

所以使用其子类SimpleDateFormat.

A:SimpleDateFormat(String pattern) 给定模式

yyyy-MM-dd HH:mm:ss

B:日期和字符串的转换

a:String -- Date

解析:parse(转换的意思)

//将一个字符串日期,转成一个Date日期

String date = "2014年09月25日 12时24分15";

DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss");

Date parse = dateFormat2.parse(date);

System.out.println(parse);

b:Date -- String:

格式化:format("符合的日期格式")

//将一个Date日期,转成一个字符串日期

DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");

String format = dateFormat.format(new Date());

System.out.println(format);

3.练习:

新中国成立多少天了?

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;


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


public class Demo4 {


	/**
	 * 新中国成立多少天了?
	 */
	public static void main(String[] args) throws Throwable {
		// 获取当下时刻的毫秒值
		Date now = new Date();
		long time = now.getTime();


		// 获取1949年10月1日12:00:00的毫秒值,定义字符串
		String str = "1949年10月01日12:00:00";
		// 设置DateFormat格式,用他的子类SimpleDateFormat完成
		DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
		// 通过dateFormat对字符串进行解析成为Date格式
		Date date = dateFormat.parse(str);
		// 获取新中国成立那天的毫秒值
		long time2 = date.getTime();


		// 将两者的毫秒值做差并转换为天数
		long day = (time - time2) / 1000 / 60 / 60 / 24;
		System.out.println("新中国已经成立" + day + "天了!");
	}


}
</span></strong></span>
           

七.Calendar类

1.封装了所有的日历字段值,通过统一的方法根据传入不同的日历字段可以获取值。

2.创建日历对象

因为Calendar类是抽象类,很多方法以及字段被定义为Protect,因此提供了一个

类方法getInstance,从而获取到Calendar的通用对象

Calendar rightNow = Calendar.getInstance();

本质返回的是子类对象

3.成员方法

A:根据日历字段得到对应的值

public int get(iCalendar.相应字段)

B:根据日历字段和一个正负数确定是添加还是减去对应日历字段的值

public abstract void add(int field,int amount)

C:设置日历对象的年月日

public final void set(int year, int month,int date)

4.练习

计算任意一年的2月份有多少天?

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;


import java.util.Calendar;


public class Demo5 {


	/**
	 * 任意一年的2月份有多少天
	 */
	public static void main(String[] args) {
		// 首先创建Calender对象
		Calendar now = Calendar.getInstance();
		int year = 2016;
		// 设置日历对象因为月份系统的取值只能到0-11,我们设置月份需要-1,我们设置3月为2
		now.set(year, 2, 1);


		// 通过3月1日后退一天得到二月最后一天
		now.add(Calendar.DAY_OF_MONTH, -1);


		// 通过get方法获取2月的天数
		int i = now.get(Calendar.DAY_OF_MONTH);
		System.out.println(year + "年的2月份有" + i + "天");


	}


}
</span></strong></span>
           

八.正则表达式

1.含义:符合一定规则的字符串。

2.规则:

A:字符

x  字符 x

\\ 反斜线字符

\r 回车符

\n 换行符

B:字符类

[abc]  a、b 或 c

[^abc] 任何字符,除了 a、b 或 c  

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内 

[0-9]  包括0-9之间的字符

C:预定义字符类

.  任何字符 

\d 数字:[0-9] 

\w 单词字符:[a-zA-Z_0-9] 

D:边界匹配器

^ 行的开头 

$ 行的结尾 

\b 单词边界

就是指这里出现的不能使单词字符。 

he;wor xixi

E:Greedy 数量词 

X? X,一次或一次也没有 

X* X,零次或多次 

X+ X,一次或多次 

X{n} X,恰好 n 次 

X{n,} X,至少 n 次 

X{n,m} X,至少 n 次,但是不超过 m 次 

F:组的概念(按照小括号从左开始编号,每一个对应着一个组)

(a(b(c)d(e)))

第一组:a(b(c)d(e))

第二组:b(c)d(e)

第三组:c

第四组:e

可以通过编号来获取组中内容,组0表示整个表达式。

3.通过String类的功能使用正则表达式

A:判断功能

public boolean matches(String regex)

B:分割功能

public String[] split(String regex)

C:替换功能

public String replaceAll(String regex,String newString)

叠词:

在同一个字符串中,右边引用左边:"(.)\\1+"

在后一个字符串中引用前面的字符串的组内容:"(.)\\1+","$1"

4.正则常规方法使用步骤:

A:Pattern和Matcher

  Pattern p = Pattern.compile("规则");

  Matcher m = p.matcher("被匹配的字符串");

B:Matcher常用方法

  public boolean matches() 匹配整个字符串

  public boolean find() 判断是有有匹配到的字符串内容

  public String group() 获取当前匹配到的字符串

  public int start()  获取当前匹配到的字符串的最开始的索引

  public int end() 获取当前匹配到的字符串的最后的索引

5.练习

叠词切割

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;

public class Test2 {

	/**
	 * 切割字符串"aa,bb,cc" 
	 * 切割字符串"aa.bb.cc" 
	 * 切割字符串"-1   99 4     23"
	 * 叠词切割:"sdqqfgkkkhjppppkl"
	 */
	public static void main(String[] args) {
//		定义字符串
		String s="aa,bb,cc";
		//定义切割规则
		String regex = ",";
		String[] string = s.split(regex);
		for (int i = 0; i < string.length; i++) {
			System.out.println(string[i]);
		}
		
		String s2="aa.bb.cc";
		String regex2="\\.";
		String[] string2=s2.split(regex2);
		for (int i = 0; i < string2.length; i++) {
			System.out.println(string2[i]);
		}
		
		String s3="-1   99 4     23";
		String regex3= " +";
		String[] string3=s3.split(regex3);
		for (int i = 0; i < string3.length; i++) {
			System.out.println(string3[i]);
		}
		
		String s4="sdqqfgkkkhjppppkl";
		String regex4="(.)\\1+";
		String[] string4=s4.split(regex4);
		for (int i = 0; i < string4.length; i++) {
			System.out.println(string4[i]);
		}
	}

}
</span></strong></span>
           

叠词替换

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;

public class Test3 {

	/**
	 * 用"#"替换叠:"sdaaafghccccjkqqqqql";
	 * 论坛中,凡是数字就使用"*"代替
	 * 用单个字符替换叠:"sdaaafghccccjkqqqqql";
	 * 
	 */
	public static void main(String[] args) {
		String s="sdaaafghccccjkqqqqql";
		
		String regex="(.)\\1+";
		
		String replaceAll = s.replaceAll(regex, "#");
		System.out.println(replaceAll);
		
		String s2="kffnkl204lfhk里的福利等哈可耗费i1929睡觉觉222kdkd";
		String regex2="[0-9]";
		String replaceAll2 = s2.replaceAll(regex2, "*");
		System.out.println(replaceAll2);
		
		String s3="sdaaafghccccjkqqqqql";
		String regex3= "(.)\\1+";
		String replaceAll3 = s3.replaceAll(regex, "$1");
		System.out.println(replaceAll3);
		
		
		
	}

}
</span></strong></span>
           

获取特定内容

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.itcast;

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

/*String str = "da jia zhu yi le, ming tian bu fang jia, xie xie!";
想要获取3个字母组成的单词*/

public class Test4 {
	public static void main(String[] args) {
		
		//首先创建正则编译对象,并绑定规则
		String regex="\\b[a-z]{3}\\b";
		Pattern p= Pattern.compile(regex);
		//组成匹配引擎
		String s= "da jia zhu yi le, ming tian bu fang jia, xie xie!";
		Matcher m=p.matcher(s);
		
		//从匹配引擎中查找目标类型并输出
		while(m.find()){
			System.out.println(m.group());
		}
	}
}
</span></strong></span>
           

继续阅读