Java基础-4.正则表达式、calendar、dateformat

一、正则表达式

String line = sc.nextLine();

String regex= "[1-9]\\d{4,14}";

System.out.println(line.matches(regex));

[ ]             代表单个字符

[abc]           a、b 或 c

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

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

[0-9]           0到9的字符都包括

[a-d[m-p]]      a到d或者m到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]

.               任何字符

\d              数字:[0-9],\必须要写成\\,代表转义

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

X?              X一次或一次也没有,例如[abc],代表abc出现了1次或者没出现,但是注意这里不能出现其他字符,例如"d".matches(regex)返回的false。

X*              X,零次或多次

X+              X,一次或多次

X{n}            X,恰好 n 次

X{n,}          X,至少 n 次

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

1.分割功能

String类的功能:public String[] split(String regex)

2.替换功能

String类的功能:public String replaceAll(String regex,String replacement)

3.分组功能

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

1     ((A)(B(C)))

2     (A

3     (B(C))

4     (C)

组零始终代表整个表达式。

高高兴兴:String regex = "(.)\\1(.)\\2,\\1代表第一组又出现一次;

快乐快乐:String regex2 = "(..)\\1";

切割:按照叠词切割: "sdqqfgkkkhjppppkl";

String regex = "(.)\\1+";

替换:“我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程” 将字符串还原成:“我要学编程”。

s=s.replace(".", "");

s=s.replaceAll("(.)\\1+","$1"); //$1代表第一组中的内容

二、Pattern和Matcher

模式和匹配器的典型调用顺序

Pattern p = Pattern.compile("a*b");    //获取正则表达式

Matcher m = p.matcher("aaaaab");   //获取匹配器

boolean b = m.matches();           //进行模式匹配

Pattern和Matcher的结合使用

把一个字符串中的手机号码获取出来

String s = "我的手机是18988888888,我曾用过18987654321,还用过18812345678";

String regex = "1[3578]\\d{9}";

Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(s);

while(m.find())

System.out.println(m.group());//打印出获取的每一个结果,如果获取到结果,m.find()会返回true,并移动到下一个匹配结果。

三、Math

public static int abs(int a)

public static double ceil(double a)

public static double floor(double a)

public static int max(int a,int b)

public static double pow(double a,double b)

public static double random()

public static int round(float a)

public static double sqrt(double a)

四、Random类

此类用于产生随机数,如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

1.构造方法

public Random()

public Random(long seed)

2.成员方法

public int nextInt()

public int nextInt(int n),生成的随机数在0-n-1之间

五、System类

public static void gc() //呼喊垃圾回收器,让垃圾回收器回收垃圾

public static void exit(int status) //非0表示异常终止,会退出jvm虚拟机

public static long currentTimeMillis() //获取当前的时间

pubiic static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)数组之间的拷贝

六、BigInteger类

可以让超过Integer范围内的数据进行运算

构造方法

public BigInteger(String val)

成员方法

public BigInteger add(BigInteger val)

public BigInteger subtract(BigInteger val)

public BigInteger multiply(BigInteger val)

public BigInteger divide(BigInteger val)

public BigInteger[] divideAndRemainder(BigInteger val) 除法取余数

七、BigDecimal

由于在运算的时候,float类型和double很容易丢失精度,为了能精确的表示、计算浮点数,Java提供了BigDecimal,不可变的、任意精度的有符号十进制数。

构造方法:

public BigDecimal(String val)

成员方法:算小数的加减乘除用字符做运算

public BigDecimal add(BigDecimal augend)

public BigDecimal subtract(BigDecimal subtrahend)

public BigDecimal multiply(BigDecimal multiplicand)

public BigDecimal divide(BigDecimal divisor)

BigDecimal bd1 = BigDecimal.valueOf(2.0);  //这种方式在开发中也是推荐的

八、Date类

类 Date 表示特定的瞬间,精确到毫秒。

1.构造方法

public Date()

public Date(long date)

2.成员方法

public long getTime()

public void setTime(long time)

1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX,新版于1971年发布。1970年1月1日 算 UNIX 和 C语言 生日。最初计算机操作系统是32 位,而时间也是用 32 位表示。 System.out.println(Integer.MAX_VALUE);

2147483647

Integer在 JAVA 内用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的总秒数是 31536000,2147483647/31536000 = 68.1

也就是说32 位能表示的最长时间是 68 年,而实际上到 2038年 01 月 19 日 03 时 14 分 07秒,便会到达最大时间,过了这个时间点,所 有 32 位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年 12月 13 日 20时 45 分 52 秒,这样便会出现时间回归的现象,很多软件便会运 行异常了。

到这里,我想问题的答案已经出来了:

因为用32 位来表示时间的最大间隔是 68 年,而最早出现的 UNIX 操作系统考虑到计算机产生的年代和应用的时限综合取了 1970 年 1 月 1 日作为 UNIX TIME 的纪元时间 ( 开始时间 ) ,而 java 自然也遵循了这一约束。

至于时间回归的现象相信随着64 为操作系统 的产生逐渐得到解决,因为用 64 位操作系统可以表示到 292,277,026,596年 12月 4 日 15时 30 分 08 秒,相信我们的 N 代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

最后一个问题:上面System.out.println(new Date(0)),打印出来的时间是8点而非0点,原因是存在系统时间和本地时间的问题,其实系统时间依然是0点,只不过我的电脑时区设置为东8区,故打印的结果是8点。

九、SimpleDateFormat类

1.DateFormat类

DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat。

2.SimpleDateFormat构造方法

public SimpleDateFormat()

public SimpleDateFormat(String pattern)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date d = sdf.parse(str);   //将时间字符串转换成日期对象

3.成员方法

public final String format(Date date)

public Date parse(String source)

十、Calendar

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

Calendar c = Calendar.getInstance(); //父类引用指向子类对象

System.out.println(c.get(Calendar.YEAR));

c.add(Calendar.MONTH, -1);

c.set(Calendar.YEAR, 2000);

System.out.println(c.get(Calendar.YEAR)); //通过字段获取年

System.out.println(c.get(Calendar.MONTH));//通过字段获取月,月是从0开始编号的

System.out.println(c.get(Calendar.DAY_OF_MONTH));//月中的第几天

System.out.println(c.get(Calendar.DAY_OF_WEEK));//周日是第一天,周六是最后一天

成员方法

public static Calendar getInstance()

public int get(int field),例如c.get(Calendar.DAY_OF_MONTH)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值