java基础复习(十三)

正则表达式

String里面的mathes方法,如果正确返回true,不正确则返回false

是指一个用来描述或者匹配一系列符合某种语法规则的字符串的单个字符串。其实就是一种规则。有自己的特殊应用。

需求:校验qq号码

1.要求必须是5-15位数字

2.0不能开头

3.必须是数字

校验QQ

1.明确返回值类型boolean

2.明确参数列表为String qq

String regex = "[1-9]\\d{4,14}";
System.out.println("123456".matches(regex));
System.out.println("023456".matches(regex));

java.util.regex

字符类

String regex = "[abc]";//[]代表单个字符
System.out.println("a".matches(regex));//true
System.out.println("d".matches(regex));//false

String regex ="[^abc]";//任何字符除了a、b、c
System.out.println("a".matches(regex));//false
System.out.println("d".matches(regex));//true
System.out.println("10".matches(regex));//false 

String regex = "[a-zA-Z]";
System.out.println("a".matches(regex));//true 包含头包含尾
System.out.println("1".matches(regex));//false

String regex = "[a-d[m-p]]"; //a-d或m到p 并集

String regex = "[a-z&&[def]]";// d、e、f 交集

String regex = "a-z&&[^bc]";//a-z除了bc

String regex = "a-z&&[^m-p]";//a-z除了m-p

预定义字符

String regex = ".";//一个任意字符
String regex = "..";//两个任意字符

String regex = "\\d";
//\代表转义字符,如果想表示\d的话,需要\\d表示0-9
String  regex = "0-9";

String regex = "\\D";//除了0-9
String regex = "[^0-9]";

//空白字符
String regex = "\\s";//[\t\n\x0B\f\r] 记住teb和四个字符是不一样的。
String regex = "\\S";//表示非空白字符

//单词字符[a-zA-Z_0-9]
String regex = "\\w";
String regex = "\\W";//非单词字符

数量词

String regex = "[abc]?";//a、b、c 一次或一次都没有
System.out.println("a".meatches(regex));//true
System.out.println("b".meatches(regex));//true
System.out.println("c".meatches(regex));//true
System.out.println("d".meatches(regex));//false
System.out.println("".meatches(regex));//true

String regex = "[abc]*";//出现零次到多次
System.out.println("c".meatches(regex));//true
System.out.println("ab".meatches(regex));//true
System.out.println("".meatches(regex));//true

String regex = "[abc]+";//出现一次或多次
String regex = "[abc]{5}";//出现五次
String regex = "[abc]{5-15}";//出现五到十五次
String regex = "[abc]{5,}";//出现五次到无穷大

split方法

String s = "金三胖.郭美美.李dayone";
String[] arr = s.split("\\.");
//.是一个比较特殊的字符,在里面的意思是代表任意字符,要转成原义分割

把给定字符串中的数字排序【直接拿字符串排序是不行的哦】

1.将字符串切割成字符串数组

2.将字符串转换成数字并将其存储在一个等长度的int数组中

3.排序

4.将排序后的结果遍历并拼接成一个字符串

String s = "99 88 444 555 22 111";
//1.将字符串切割为字符数组
String[] sArr = s.split(" ");
//2.将字符数组转换为整数数组
int[] arr = new Int[sArr.length];
for(int i=0;i < arr.length;i++){
    arr[i] = Integer.parseInt(sArr[i]);
}
//3.排序
Array.sort(arr);

//4.将排序后的结果遍历并拼接成一个字符串

//1.不推荐用String会产生过多的垃圾
String str = "";
for(int i = 0; i <arr.length;i++){
    if(i == arr.length - 1){
        str = str +arr[i];
    }else{
        str = str + arr[i]+" ";
    }
}
System.out.println(str);

//2.推荐使用StringBuffer,不会产生过多的垃圾
StringBuffer sb = new StringBuffer();
for(int i = 0; i <arr.length;i++){
    if(i == arr.length - 1){
        sb.append(arr[i]);
    }else{
        sb.append(arr[i]).append(" ");
    }
}
System.out.println(str);

正则表达式的替换功能

public String replaceAll(String regex,String replacement);

String s = "wolai2heima";
String regex = "\\d";//\\d代表任意数字
String s2 = s.replaceAll(regex,"");
System.out.println(s2);
//woaiheima

正则表达式的分组功能

捕获组可以通过从左到右计算器开括号来编号。

例如,在表达式((A)(B(C)))中存在这样四个这样的组:

  1. ((A)(B(C)))
  2. (A
  3. (B(C))
  4. (C)

叠词

String regex = "(.)\\1(.)\\1"; //\\1代表再出现一次 快快乐乐
String regex = "(..)\\1"; //让两个任意词又出现一次 死啦死啦

案例

//需求:请按照叠词切割:"ssdddffafsafsddas";
String s = "ssdddffafsafsddas";
String regex ="(.)\\1+";//和数次叠加使用 加号代表1次到多次
String [] arr = s.split(s);

//替换
//需求:我我我我......我....要...要.....学...编程
String s = "我我我我......我....要...要.....学...编程";
String s2 = s.replaceAll("\\.+","");
String s3 = s2.replaceAll("(.)\\1+","$1");//$1代表第一组中的内容

Pattern和Matcher

java.utlil.regex.Patten

Pattern p = Pattern.compile("a*b");//获取到正则表达式
Matcher m = p.matcher("aaaaab");//获取匹配器
boolean b = m.matches();//看是否能匹配。匹配就返回true

System.out.println("aaaaab".matches("a*b"));//相当于这样

应用【非常有用】

//需求:把一个字符串中的手机号获取出来
String s = "我的手机号码是18377777777还用过18888888888还有";
String regex = "1[3578]\\d{9}";//手机号码的正则表达式
//Pattern p = Pattern.compile(regex);
//Matcher m = p.matcher(s);
//boolean b = m.matches();

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
//boolean b = m.find();//说明有子串 true
//String s1 = m.group();
//System.out.println(s1);//要先找find再获取
while(m.find()){
    System.out.println(m.group());
}

Math类概述

Math类包含用于执行基本数学运算的方法,如初等函数,

public static int abs(int a); //取绝对值
public static double ceil(double a);//天花板 向上取整 但果是一个double类型
public static double floor(double a);//地板 向下取整,结果也是double
public static double max(double a,doubleb);
min();
Math.pow(2,3); //2.0^3.0
Math.random();//生成0.0到1.0之间的小数,包含0.0不包含1.0
Math.round(12.3f);//四舍五入
Math.sqrt(4);//开根

Random类概述

java.lang.Object.Random

Random r = new Random();
int x = r.nextInt(100);//生成0到n-1范围内的随机数
System.out.println(x);

//很多随机数都是由时间决定的。

System类的概述

java.lang.System

不让任何类创建其对象,通过类名调用,private。

System.in;//键盘输入流
System.out;//输出流
System.err;//

System.gc(); //运行垃圾回收期,相当于呼喊保洁阿姨
System.exit(0);//非0状态是异常终止,退出jvm

System.currentTimeMillis();//获取当前时间
1秒.equals(1000毫秒);

//数组内容拷贝
System.arraycopy(src,0,dest,0,src.length);
@override
public void finalize(){
    System.out.println("垃圾被清理了");
}

BigInteger 大整数

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

构造方法

public BigInteger(String val);

成员方法:

add 加

substract 减

multiply 乘

divide 除

divideAndRemainder取除数和余数

BigDecimal的概述

由于float和double中容易损失精度,只会无限的接近。【二进制】

BigDecimal bd1 = new BigDecimal("2.0");//开发时推荐
BigDecimal bd2 = new BigDecimal("1.1");
System.out.println(bd1.substract(bd2));//0.9

BigDecimal bd1 = new BigDecimal(2.0);
BigDecimal bd2 = new BigDecimal(1.1);
System.out.println(bd1.substract(bd2));//0.899


BigDecimal bd1 = BigDecimal.valueOf(2.0);//开发时推荐
BigDecimal bd2 = BigDecimal.valueOf(2.0);
System.out.println(bd1.substract(bd2));//0.9

Date类的概述

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

1.java.util.Date【学】

2.java.sql.Date

Date d1 = new Date();
System.out.println(d1);//如果没有传,代表当前时间

Date d2 = new Date(0); //8点 东八区
System.out.println(d2);

System.out.println(d1.getTime());//通过时间对象获取毫秒值
System.out.pritnln(System.currentTimeMilies);//通过系统类方法获取毫秒值

SimpleDateFormat

DateFormat是其父类,是一个抽象类,不允许实例化。

DateFormat df1 = DateFormat.getDateInstance();//父类引用指向子类对象,右边的方法返回一个子类的对象。
DateFormat df1 = new SimpleDateFormat();
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
System.out.println(sdf.format(d)); 


//将时间字符串转换成日期对象---转换成日期对象可以进行计算
String str = "2000年08月08日 08:08:08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse(str);//抛出异常

练习:

你来到世界多少天?

1.将生日和今天字符串存储在String类型的变量中。

2.定义日期格式化对象

3.将日期字符串转换成日期对象

4.通过日期对象后期时间毫秒值

5.将两个时间毫秒值相减-除1000再除60再除60再除24

Calendar类【格林尼治时间】

Calendar c = Calendar.getInstance();

Calendar中的add

练习:

需求:键盘录入任意一个年份,判断该年是闰年还是平年。

Calendar c = Calendar.getInstance();

分析:

1.键盘录入年Scanner

2.创建Calendar c = Calendar.getInstance();

3.通过set方法设置为那一年的3月1日

4.将日向前减去1

5.判断日是多少天,如果是29天返回true,否则返回false。

本文链接:

https://heyzen.club/index.php/J/244.html
1 + 6 =
快来做第一个评论的人吧~