目录
一. 正则表达式
二. Math类
三. Random类
四. Date类
五. Calendar类
六. SimpDateFormate类
七. BigInteger类
八. BigDecimal类
一. 正则表达式
正则表达式(Regular Expression)就是用一些特殊的符号去匹配一个字符串是否符合规则,利用String类中的matches()方法去匹配字符串
这里只介绍一些常用的正则表达式,当需要使用时可以自己在网上查找
* | 表示匹配0次或多次 |
+ | 至少匹配一次或多次 |
[] | 只允许出现括号内的内容 |
{n} | 只能出现n次 |
{n,} | 至少出现n次 |
{n,m} | 只能出现n到m次 |
\d | 匹配数字 |
\D | 匹配非数字 |
\w | 匹配数字,字母,下划线 |
\W | 匹配非数字,字母,下划线 |
\s | 匹配空格字符 |
\S | 匹配非空格字符 |
| | 逻辑或 |
. | 匹配除了换行符的任意字符 |
public class RegExDemo1 {/*正则表达式 (Regular Expression),简称 regex正则表达式是一种规则(模式)匹配语法,可以使用一些正则表达式中定义的特殊符号来定义一种规则,然后用此规则去匹配某个字符串如果字符串与规则相匹配返回true,否则返回false验证一个字符串是否是中国大陆地区的手机号格式? //长度是11位 是不是1开头 判断第二位 判断之后的每位是数字可以使用正则表达式定义一个规则去匹配即可*/public static void main(String[] args) {String s = "704447306";System.out.println(s.matches("[0-9]*"));//[0-9]* 允许出现0次或多次数字System.out.println(s.matches("[0-9]+"));//[0-9]+ 允许出现至少一次或多次数字System.out.println(s.matches("1[0-9]{3}"));//[0-9]{3}只能是n次System.out.println(s.matches("1[0-9]{3,}"));//[0-9]{3}至少n次System.out.println(s.matches("[0-9]{3,6}")); // [0-9]{3,6}至少n次 不大于m次System.out.println(s.matches("[1-9]{3,6}"));System.out.println(s.matches("[357]{3,6}"));//只能是3 5 7 3-6位System.out.println(s.matches("\\d{3,6}")); //\d == [0-9] 匹配数字 \D 匹配非数字System.out.println(s.matches("1[358]\\d{9}"));//匹配手机号System.out.println(s.matches("[1-9]\\d{5,9}"));//匹配qq号}
}
public class RegExDemo2 {/*正则表达式 (Regular Expression) 简称regex正则表达式是一种规则(模式)匹配语法可以使他一些正则表达式中定义的特殊符号来定义一种规则,然后用此规则去匹配某个字符串如果字符串与规则匹配返回true,否则返回false[0-9] [1-9] [357] [a-z] [A-z0-9]* + {n} {n,} {n,m}\d匹配数字\D匹配非数字\w匹配数字,字母,下划线\W匹配非数字 字母 下划线\s匹配空格字符\S非空格字符|逻辑或.匹配任意字符,要使用本来的.要转义[\\u4e00-\\u9fa5] 匹配汉字验证一个字符串是否是中国大陆地区的手机号格式? //长度11位 是不是1开头 判断第二位 判断之后的每位是数字可以使用正则表达式定义一个规则去匹配*/public static void main(String[] args) {String s = "704447306@asd.com";System.out.println(s.matches("[a-z]*"));//匹配小写字母System.out.println(s.matches("[A-Z]+"));//匹配大写字母System.out.println(s.matches("[a-zA-Z]*"));//匹配所有字母System.out.println(s.matches("[0-9A-Z]*"));//匹配数字和大写字母System.out.println(s.matches("\\w*"));//匹配数字 字母 下划线System.out.println(s.matches("[\\u4e00-\\u9fa5]*"));//匹配中文System.out.println(s.matches("[\\w\\s]"));//\s匹配空格//邮箱格式 xxxx@xx.com.cnSystem.out.println(s.matches("\\w{6,10}@\\w{1,5}((\\.com)|(\\.com\\.cn))"));}
}
二. Math类
Math类中有一些用于数学计算的方法,在java.lang包中,下面介绍一些常用的
PI | 数学中的PI(3.1415926) |
abs(n) | 计算n的绝对值 |
sqrt(n) | 对n开根号 |
pow(n,m) | 计算n的m次方 |
floor(n) | 对n向下取整 |
ceil(n) | 对n向上取整 |
round(n) | 四舍五入 |
max() | 求两个数之间的较大者 |
random() | 返回0-1之间的随机数 |
public class MathDemo {public static void main(String[] args) {System.out.println(Math.PI);//PISystem.out.println(Math.abs(-3));//绝对值System.out.println(Math.sqrt(9));//开根号System.out.println(Math.pow(2,3));//n的m次方System.out.println(Math.floor(9.9));//向下取整System.out.println(Math.ceil(9.1));//向上取整System.out.println(Math.round(9.5));//四舍五入System.out.println(Math.max(5,10));//返回两个数之间的较大者System.out.println(Math.random());//返回0-1之间的随机数 可能会等于0,小于1}
}
三. Random类
Random类是一个用于产生随机数的类,在java.util包中
nextBoolean() | 返回一个随机的布尔值 |
nextInt() | 在int范围内返回一个随机数 |
nextInt(n) | 在0-(n-1)之间返回一个数 |
nextLong() | 在Long范围内返回一个随机数 |
nextBytes(byte[ ]) | 随机取出byte数组个长度的随机数返回 |
public class RandomDemo {public static void main(String[] args) {Random random = new Random();System.out.println(random.nextBoolean());//返回一个随机的布尔值System.out.println(random.nextInt());//在int的取值范围内随机获取一个值System.out.println(random.nextLong());//在long的取值范围内随机获取一个值System.out.println(random.nextInt(35)+1);//在给定范围内随机获取一个数 0 <= num < 给定数byte[] bytes = new byte[5];random.nextBytes(bytes);//随机取出数组长度个byte类型的随机数System.out.println(Arrays.toString(bytes));}
}
四. Date类
在java.util包中,Date类主要是一个日期类,Date类的对象主要用来记录对象被创建那一刻的时间,里面有很多获取关于时间的方法,只不过因为该类在JDK1.0时就已经被写好了,很多方法已经被抛弃了,有其他类替换了
getYear() | 获取年份,不过该方法中用当前年份-1900,所以在使用时要+1900 |
getMonth() | 获取月份,该方法中用当前月份-1,所以在使用时要+1 |
getDay() | 获取天数 |
getHours() | 获取小时 |
getMinutes() | 获取分钟 |
getSeconds() | 获取秒 |
getTime() | 获取该对象被创建那一刻的时间 |
Date(long date) | 有参构造,传入一个时间戳,返回这个时间戳对应的日期对象 |
public class DateDemo {public static void main(String[] args) {Date date = new Date();//获取程序运行时的时刻System.out.println(date);System.out.println(date.getYear()+1900);//Date类中的有些方法已经被后面的代替,但是还可以用System.out.println(date.getDay());System.out.println(date.getMonth()+1);//月份System.out.println(date.getHours());//小时System.out.println(date.getMinutes());//分钟System.out.println(date.getSeconds());//秒//获取的是自1970 1.1 0:0:0至程序运行时刻的毫秒值System.out.println(date.getTime());//1719925778342 时间戳qa2wesdrxftgyvhbujnkiDate date1 = new Date();System.out.println(date1.getTime() - date.getTime());Date date2 = new Date(17119925778342L);//将指定的long类型的时间戳构造出一个时间对象System.out.println(date2);}
}
五. Calendar类
Calendar类是一个日历类,该类是一个抽象类,所以我们在使用时要创建他的子类对象,一般我们创建GregorianCalendar类的对象,该类就是现在我们使用的公历,Calendar类就是用来替代Date类中的一些方法的类
get() | 主要用来将GregorianCalendar类中的静态常量转为我们想要的时间 |
YEAR | 在GregorianCalendar类中是一个静态的常量1,配合get()方法可以返回年份 |
MONTH | 在GregorianCalendar类中是一个静态的常量2,配合get()方法可以返回月份-1,使用时记得+1 |
DAY_OF_MONTH | 在GregorianCalendar类中是一个静态的常量5,配合get()方法可以返回今天是这个月的第几天 |
DAY_OF_WEEK | 在GregorianCalendar类中是一个静态的常量7,配合get()方法可以返回今天是这周的第几天 |
DAY_OF_YEAR | 在GregorianCalendar类中是一个静态的常量6,配合get()方法可以返回今天是今年的第几天 |
WEEK_OF_MONTH | 在GregorianCalendar类中是一个静态的常量4,配合get()方法可以返回这周是这个月的第几周 |
HOUR_OF_DAY | 在GregorianCalendar类中是一个静态的常量11,配合get()方法可以返回现在是今天的第几个小时 |
getTimeInMillis() | 该方法返回对象被创建的时间,和Date类中的getTime()用法相同 |
六. SimpDateFormate类
SimpDateFormate类用于将字符串和日期(Date类)进行相互转换
SimpDateFormate(String pattern) | 传入一种匹配模式,可以将字符串转为该模式的日期对象,也可以将日期对象转为该模式的字符串 |
parse(String s) | 将字符串转为日期对象 |
format(Date d) | 将日期对象转为字符串 |
public class SimpleDateFormatDemo {public static void main(String[] args) throws ParseException {/*把字符串日期转为Date对象*/String s = "2003-02-03";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(s);System.out.println(date.getYear()+1900);/*把Date对象转为字符串*/SimpleDateFormat sdf1 = new SimpleDateFormat("y-M-d H:m:s E");Date date1 = new Date();String s1 = sdf1.format(date1);System.out.println(s1);}
}
七. BigInteger类
主要用于对大数的计算
add() | 加法运算 |
subtract() | 减法运算 |
multiply() | 乘法运算 |
divide() | 除法运算 |
public class BigIntegerDemo {public static void main(String[] args) {BigInteger bigInteger1 = new BigInteger("111111111111111111111111111111111111");BigInteger bigInteger2 = new BigInteger("999999999999999999999999999999999999");BigInteger bigInteger3 = bigInteger1.add(bigInteger2);BigInteger bigInteger5 = bigInteger1.subtract(bigInteger2);BigInteger bigInteger4 = bigInteger1.multiply(bigInteger2);BigInteger bigInteger6 = bigInteger2.divide(bigInteger1);System.out.println(bigInteger1);System.out.println(bigInteger2);System.out.println(bigInteger3);System.out.println(bigInteger4);System.out.println(bigInteger5);System.out.println(bigInteger6);}
}
八. BigDecimal类
小数在计算机中存储时也是用二进制的形式,但有的十进制小数对小数部分采取乘2取整的方式时会发生无限不循环的情况,这就导致了计算机在表示小数时有时候只能近似表示的情况.例如:
public class Main {public static void main(String[] args) {double result = 1-0.7;System.out.println(result);if(result==0.3){System.out.println("相等");}else{System.out.println("不相等");}}
}
此时就需要使用到BigDecimal类,来对小数进行准确的计算
add() | 加法运算 |
subtract() | 减法运算 |
multiply() | 乘法运算 |
divide() | 除法运算 |
public class BigDecimalDemo {public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal("0.7");BigDecimal bigDecimal2 = new BigDecimal("0.3");BigDecimal bigDecimal3 = bigDecimal1.add(bigDecimal2);BigDecimal bigDecimal4 = bigDecimal1.subtract(bigDecimal2);BigDecimal bigDecimal5 = bigDecimal1.multiply(bigDecimal2);BigDecimal bigDecimal6 = bigDecimal1.divide(bigDecimal2,5,1);System.out.println(bigDecimal3);System.out.println(bigDecimal4);System.out.println(bigDecimal5);System.out.println(bigDecimal6);}
}
这里注意计算除法时,可能会出现无限循环或者无限不循环的情况,这时会报错,所以注意除法的方法(divide)可以设置两个参数,一个divide(int scale,int roundingMode),scale表示小数点后保留几位小数,roundingMode是1表示舍去后面的位,是2表示进位在舍去后面的位
我们再来看上面的例子
public class Main {public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal("1");BigDecimal bigDecimal2 = new BigDecimal("0.7");BigDecimal bigDecimal3 = new BigDecimal("0.3");BigDecimal result = bigDecimal1.subtract(bigDecimal2);System.out.println(result);if(result.equals(bigDecimal3)){System.out.println("相等");}else{System.out.println("不相等");}}
}
注意:BigDecimal的构造方法中如果用到小数,一定要传字符串,而不是直接传该小数,否则计算机在转换时仍旧无法将该小数准确表示导致构造的BigDecimal对象也是一个不精确的