day14-Java正则表达式Math类日期类

2017-01-15  本文已影响107人  苦笑男神

14.01_常见对象(正则表达式的概述和简单使用)

// 正则表达式  校验QQ
String regex = "[1-9]\\d{4,14}";
System.out.println("1234567".matches(regex));

14.02_字符类正则

字符类  []代表单个字符的匹配
[abc]    a、b 或 c(简单类) 
[^abc]    任何字符,除了 a、b 或 c(否定) 
[a-zA-Z]    a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]]    a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]]    d、e 或 f(交集) 
[a-z&&[^bc]]    a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]]    a 到 z,而非 m 到 p:[a-lq-z](减去)

System.out.println("u".matches("[^abc]"));  //true
System.out.println("uP".matches("[^abc]"));  //false ,因为[]只匹配单个字符

14.03_预定义字符类正则

预定义字符类 
. 任何字符(与行结束符可能匹配也可能不匹配) 
\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] 

14.04_常见对象(数量词)

// Greedy 数量词
X? X,一次或一次也没有 
X* X,零次到多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次 

System.out.println("a".matches("[abc]?")); //true 出现了a
System.out.println("y".matches("b?")); //false ,b是一次也没有,但是还有其他字符
System.out.println("".matches("\\d?"));//true 数字一次也没有出现
System.out.println("22222".matches("[2]{3,}")); //true 2自少3次,切只能是2

14.05_正则表达式的分割功能

// 1.正则表达分割字符串  要求: 以 - 分割开
String s = "qwe-asd-zxc-12355";
String[] arr = s.split("-");
System.out.println(Arrays.toString(arr));

String s2 = "www.rrr.xxoo.ppp";
String[] arr2 = s2.split("\\.");  //这里比较 特殊,需要用2个\\来转义
System.out.println(Arrays.toString(arr2));

14.06_常见对象(把给定字符串中的数字排序)

String s = "91 27 46 38 50 100";
String[] arr = s.split(" ");  //分割字符串

int[] intArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) { //字符串数组转为int数组
    intArr[i] = Integer.parseInt(arr[i]);
}

Arrays.sort(intArr);  //int数组排序
System.out.println(Arrays.toString(intArr));

14.07_正则表达式的替换功能

String s = "xxoo123qwer";
// \\d代表任意数字
System.out.println(s.replaceAll("\\d", "-")); //输出:xxoo---qwer

14.08_常见对象(正则表达式的分组功能)

 // 叠词 快快乐乐 ,高高兴兴
 // "\\1"代表第一组(.)再出现一次 \\2 也代表第二组再出现一次
String regex = "(.)\\1(.)\\2";  
System.out.println("快快乐乐".matches(regex));   //true
System.out.println("xoxo".matches(regex));   //false

System.out.println("高兴高兴".matches("(..)\\1"));  //true

// 第一题: 需求:请按照叠词切割: "sdqqfgkkkhjppppkl";
String s = "sdqqfgkkkhjppppkl";
String[] arr = s.split("(.)\\1+"); // \\1+ 代表一次或多次
System.out.println(Arrays.toString(arr));
        
// 第二题:需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
String ss1 = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";

String ss2 = ss1.replaceAll("\\.", ""); // 1.去掉.
String ss3 = ss2.replaceAll("(.)\\1+", "$1"); // 2. $1代表第一组的内容(.)
System.out.println(ss3);

14.09_Pattern和Matcher的概述

Pattern p = Pattern.compile("a*b"); // 获取正则表达式  a*b a出现0次或多次,后面跟上b
Matcher m = p.matcher("aaaaab"); // 获取匹配器
boolean b = m.matches(); //获取匹配结果

//上面三句,等价于:下面底层的实现就是上面的3句
System.out.println("aaab".matches("a*b"));

14.10_常见对象(正则表达式的获取功能)

// 获取字符串中的两个手机号
String s = "么么哒XXOO13509801846,我日18518607465";

Pattern p = Pattern.compile("1[3578]\\d{9}");  //手机号码正则表达式
Matcher m = p.matcher(s);

while (m.find()) 
    System.out.println(m.group());

14.11_Math类概述和方法使用

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

public static int max(int a,int b)   //两个数的最大值  min自学
System.out.println(Math.PI); // 圆周率PI,常量
System.out.println(Math.abs(-12.5)); //结果 12.5  绝对值
System.out.println(Math.ceil(12.123)); //结果 13.0  向上取整,但是结果是double
System.out.println(Math.ceil(12.999)); //结果 13.0
System.out.println(Math.floor(12.123)); //结果 12.0  向下取整,但是结果是double
System.out.println(Math.floor(12.999)); //结果 12.0
System.out.println(Math.pow(2, 3));  //求n次方 ,这里就是2的3次方
System.out.println(Math.random()); //生成0.0到1.0之间的随机数,包括0.0,不包括1.0
System.out.println(Math.round(12.6F)); //四舍五入
System.out.println(Math.sqrt(12.4));  //开平方

14.12_Random类的概述和方法使用

Random r = new Random();
for (int i = 0; i < 10; i++) {  //循环10次,生成随机数
    int x = r.nextInt(100); // 0-100 包括0,不包括100
    System.out.println(x);
}

14.13_System类的概述和方法使用

System 类包含一些有用的类字段和方法。它不能被实例化。

// 一个源文件中,不允许定义两个 public class

System.gc();  //运行垃圾回收器
System.exit(0); //退出Java虚拟机
long time = System.currentTimeMillis();  //返回当前系统的毫秒值(1970年至今的时间差)

int[] src = {11,22,33,44,55};
int[] dest = new int[8];
//数组的拷贝,这个是集合的底层实现
System.arraycopy(src, 0, dest, 0, src.length);
System.out.println(Arrays.toString(dest));

14.14_BigInteger类的概述和方法使用

BigInteger bi1 = new BigInteger("100");
BigInteger bi2 = new BigInteger("2");

System.out.println(bi1.add(bi2)); //加法运算
System.out.println(bi1.subtract(bi2)); //减法运算
System.out.println(bi1.multiply(bi2)); //乘法运算
System.out.println(bi1.divide(bi2));  //除法运算

BigInteger[] arr = bi1.divideAndRemainder(bi2); //得到 除数 和 余数 (除法和取模)
System.out.println(Arrays.toString(arr));

14.15_BigDecimal类的概述和方法使用

System.out.println(2.0 - 1.1); //结果是 0.89... 精度有问题。。        

// 推荐使用字符串的形式,double不推荐, 精度不如字符串
BigDecimal bd1 = new BigDecimal("2.0");
BigDecimal bd2 = new BigDecimal("1.1");
System.out.println(bd1.subtract(bd2));

// 或者
BigDecimal bd3 = BigDecimal.valueOf(2.0);
BigDecimal bd4 = BigDecimal.valueOf(1.1);
System.out.println(bd3.subtract(bd4));

14.16_Date类的概述和方法使用

14.17_SimpleDateFormat类实现日期和字符串的相互转换

Date d1 = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(df.format(d1)); //将日期转为字符串

//将时间字符串 转为 日期对象
String str = "2008-10-12 15:00:00";
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d2 = df2.parse(str);
System.out.println(d2);

14.18_你来到这个世界多少年案例

// 1.将生日字符串和今天字符串存在string中
String birthday = "1999年07月14日";
String today = "2016年12月09日";

// 2.定义日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

// 3.将日期字符串转为日期对象
Date d1 = sdf.parse(birthday);
Date d2 = sdf.parse(today);

// 4.求毫秒值差
long time = d2.getTime() - d1.getTime();

// 5.将毫秒差除以1000,再除以60,再除以60,再除以24,/365 得到年
System.out.println(time / 1000 / 60 / 60 / 24 / 365);

14.19_Calendar类的概述和获取日期的方法

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Calendar c = Calendar.getInstance(); //父类对象指向子类对象
System.out.println(c.get(Calendar.YEAR)); //得到年
System.out.println(c.get(Calendar.MONTH)+1); //得到月,注意是从0开始的,加是正常的
System.out.println(c.get(Calendar.DAY_OF_MONTH));//得到日
System.out.println(c.get(Calendar.WEEK_OF_MONTH));//得到第几周
System.out.println(c.get(Calendar.DAY_OF_WEEK));//得到周内第几天(周日为1,周一为2...)

System.out.println(getWeek(c.get(Calendar.DAY_OF_WEEK)));

public static String getWeek(int week) {
    if (week > 7 || week < 1) return "";
    //因为 Calendar.DAY_OF_WEEK 返回的是 1-7,1是星期日,2是星期一,类推的..
    String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    return arr[week];
}

14.20_Calendar类的add()和set()方法

//Date转为 Calendar
Calendar c1 = Calendar.getInstance();
c1.clear();
c1.setTime(new Date());;

Calendar c = Calendar.getInstance(); //父类对象指向子类对象
//  c.add(Calendar.YEAR, 1);  //年份加1一年,(负数就是减)
c.add(Calendar.MONTH, -2);  //减去2个月,年份会自动变的,比如1月减2个月,就是上一年了

c.set(Calendar.YEAR, 2015); //修改年份
c.set(2017, 11, 12);  //修改为 2017-12-12 ,注意,月份是从0开始,所以11就是12月

//Calendar转为Date
Date date = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(date));

14.21_如何获取任意年份是平年还是闰年)

// 判断是闰年还是平年, 2月是29天是闰年,否则是平年

Scanner sc = new Scanner(System.in);
System.out.println("请输入年份,判断该年份是闰年还是平年...");
int year = sc.nextInt();
sc.close();

Calendar c = Calendar.getInstance();
c.clear();
c.set(year, 2, 1);  //设置为 那一年的3月1日
c.add(Calendar.DAY_OF_MONTH, -1); //将日向前减去1,就是2月的最后一天
//判断是否是29天
if (29 == c.get(Calendar.DAY_OF_MONTH)) {
    System.out.println("您输入的是闰年..");
}else {
    System.out.println("您输入的是平年..");
}

END。
我是小侯爷。
在魔都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
如果读完觉得有收获的话,记得关注和点赞哦。
非要打赏的话,我也是不会拒绝的。

上一篇 下一篇

猜你喜欢

热点阅读