------- android培训、java培训、期待与您交流! ----------
###07.01_常见对象(正则表达式的概述和简单使用)
* A:正则表达式
* 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
* B:案例演示
* 需求:校验qq号码.
* 1:要求必须是5-15位数字
* 2:0不能开头
* 3:必须都是数字
代码实现:
private static void method() {
//1: 键盘输入QQ号码(字符串的QQ号码)
Scanner sc = new Scanner(System.in);
//获取键盘录入的字符串
String qq = sc.nextLine();
//定义一个正则表达式, 它是一个字符串, 符合某种语法规则的字符串
String regex = "[1-9][0-9]{5,11}";
//验证QQ号码
boolean flag = qq.matches(regex);
if (flag) {
System.out.println("QQ合法");
} else {
System.out.println("QQ不合法");
}
}
分析:
* 1: 键盘输入QQ号码(字符串的QQ号码)
* 2: 通过输入QQ号码, 验证长度是否合法
* 是:
* 判断是否以数字0开头
* 是:对不起,QQ号码无效,不能以0开头
* 否:
* 判断每一位是否都是数字
* 如果发现其中的哪一位不是数字,说明该QQ号码 无效
* 如果都是数字,说明该QQ号码正确
* a:非正则表达式实现
* b:正则表达式实现
###07.02_常见对象(字符类)
* A:字符类
* [abc] a、b 或 c(简单类)
* [^abc] 任何字符,除了 a、b 或 c(否定)
* [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
* [0-9] 0到9的字符都包括
###07.03_常见对象(预定义字符类)
* A:预定义字符类
* . 任何字符。
* \d 数字:[0-9]
* \w 单词字符:[a-zA-Z_0-9]
###07.04_常见对象(数量词)
* A:Greedy 数量词
* X? X,一次或一次也没有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
###07.05_常见对象(正则表达式的案例演示)
通过正则表达式验证 电子邮箱 是否正确
public class RegexDemo {
public static void main(String[] args) {
//指定邮箱
String email = "[email protected]";
//String email = "@.";
//String email = "[email protected]";
//指定规则
String regex = "\\w+@\\w+(\\.\\w+)+";
//验证
boolean flag = email.matches(regex);
System.out.println(flag);
}
}
###07.06_常见对象(正则表达式的分割功能)
* A:正则表达式的分割功能
* String类的功能:public String[] split(String regex)
* B:案例演示
* 正则表达式的分割功能
//准备需要的数据
//String age = "18-20-30-50";
//String age = "18 20 30 50";
String age = "18.20.30.50";
//指定规则
//String regex = "-";
//String regex = " ";
String regex = "\\.";
//切割
String[] arr = age.split(regex);
System.out.println(Arrays.toString(arr));
###07.07_常见对象(正则表达式的替换功能)
* A:正则表达式的替换功能
* String类的功能:public String replaceAll(String regex,String replacement)
* B:案例演示
* 正则表达式的替换功能
//指定数据
String str = "你真坑爹, SB, SB, 2B";
//指定规则
//String regex = "SB";
//替换
//String result = str.replaceAll(regex, "*");
//System.out.println(result);
//实际开发中
String[] regex = {"SB","2B", "213"};
for (int i=0; i < regex.length; i++) {
str = str.replaceAll(regex[i], "*");
//str = "你真坑爹, *, *, 2B";
//str = "你真坑爹, *, *, *";
}
System.out.println(str);
这项功能主要用于游戏中客户打字,当出现敏感词汇时,我们可以通过这项方法进行屏蔽
###07.08_常见对象(正则表达式的分组功能)
* A:正则表达式的分组功能
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
*
1 ((A)(B(C)))
2 (A
3 (B(C))
4 (C)
组零始终代表整个表达式。
B:案例演示
替换:
需求:我我我我我...想想想想想想...学学学学学...习习习习..Java
结果: 我想学习Java
我们用代码实现:
//指定数据
String str = "我我我我........想想想想想想...学学学学学...习习习习..Java";
//指定规则
String regex = "(\\.)+";
//替换
String result = str.replaceAll(regex, "");
System.out.println(result);
//我我我我我想想想想想想学学学学学习习习习Java
//指定规则
//String regex2 = "我+想+学+习+Java";
String regex2 = "(.)\\1+";
//替换
String result2 = result.replaceAll(regex2, "$1");
//我想学习Java
System.out.println(result2);
###07.09_常见对象(Pattern和Matcher的概述)
* A:Pattern和Matcher的概述
Patter指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher
对象,依照正则表达式,该对象可以与任意字符序列
匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
Macher代表的是 正则表达式匹配后的 结果对象,可以使用它执行三种不同的匹配操作:
matches 方法尝试将整个输入序列与该模式匹配。
lookingAt 尝试将输入序列从头开始与该模式匹配。
find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
* B:模式和匹配器的典型调用顺序
* 典型的调用顺序是
* Pattern p = Pattern.compile("a*b");
* Matcher m = p.matcher("aaaaab");
* boolean b = m.matches();
###07.10_常见对象(正则表达式的获取功能)
* A:正则表达式的获取功能
* Pattern和Matcher的结合使用
* B:案例演示
//以前的做法
String regex = "a*b";
String str = "aaaaab";
boolean flag = str.matches(regex);
System.out.println(flag);
//典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
System.out.println(b);
###07.11_常见对象(Math类概述和方法使用)
* A:Math类概述
* Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
* B:成员方法
* public static double abs(double a)返回 double 值的绝对值
* public static double ceil(double a) 返回比参数大的最小double整数
* public static double floor(double a) 返回比参数小的最大double整数
* public static double max(double a, double b)返回两个 double 值中较大的一个
* public static double min(double a, double b)返回两个 double 值中较小的一个
* public static double pow(double a, double b)返回第一个参数的第二个参数次幂的值
案例演示:
//返回 double 值的绝对值
double d1 = 3.1415;
double d2 = -3.199999;
System.out.println("abs:" + Math.abs(d1));
System.out.println("abs:" + Math.abs(d2));
//返回比参数大的最小double整数
System.out.println("ceil:" + Math.ceil(d1));//4.0
System.out.println("ceil:" + Math.ceil(d2));//-3.0
//返回比参数小的最大double整数
System.out.println("floor:" + Math.floor(d1));//3.0
System.out.println("floor:" + Math.floor(d2));//-4.0
//返回两个 double 值中较大的一个
System.out.println("max:" + Math.max(d1, d2));//3.1415
//返回第一个参数的第二个参数次幂的值
System.out.println("pow:" + Math.pow(2.0, 3));//8.0
//返回一个0到1之间的数,不包含0
System.out.println("random:" + Math.random());
//public static long round(double a) 四舍五入
System.out.println("round:" + Math.round(3.6));//4
System.out.println("round:" + Math.round(3.3));//3
###07.12_常见对象(Random类的概述和方法使用)
* A:Random类的概述
* 此类用于产生随机数如果用相同的种子创建两个 Random 实例,
* 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
* B:构造方法
* public Random()
* public Random(long seed)
* C:成员方法
* public int nextInt()
* public int nextInt(int n)(重点掌握)
代码实现:
//Random r = new Random();
Random r = new Random(1234567L);
for (int i=0; i<10; i++) {
//System.out.println(r.nextInt());
System.out.println(r.nextInt(100));
}
###07.13_常见对象(System类的概述和方法使用)
* A:System类的概述
* System 类包含一些有用的类字段和方法。它不能被实例化。
* B:成员方法
* public static void gc()
* public static void exit(int status)
* public static long currentTimeMillis()
* C:案例演示
* System类的成员方法使用
Person p = new Person("小明",20);
p = null; //垃圾对象
// 调用 gc 方法暗示着 Java 虚拟机做了努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存
System.gc();
for (int i = 0; i < 100; i++) {
if (i == 50) {
//break;//退出循环
System.exit(0);//退出JVM
}
System.out.println(i);
}
System.out.println("over");
//currentTimeMillis 获取当前系统的毫秒值时间
System.out.println( System.currentTimeMillis() );
###07.14_常见对象(BigInteger类的概述和方法使用)
* A:BigInteger的概述
* 可以让超过Integer范围内的数据进行运算
* B:构造方法
* public BigInteger(String val)
* C:成员方法
* 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)
public static void main(String[] args) {
BigInteger b1 = new BigInteger("100");
BigInteger b2 = new BigInteger("50");
System.out.println("add:" + b1.add(b2));//结果150
System.out.println("subtract:" + b1.subtract(b2));//结果50
System.out.println("multiply:" + b1.multiply(b2));//结果5000
System.out.println("divide:" + b1.divide(b2));//结果2
BigInteger[] arr = b1.divideAndRemainder(b2);
System.out.println("divideAndRemainder:" + Arrays.toString(arr));//结果2, 0
###07.15_常见对象(BigDecimal类的概述和方法使用)
* A:BigDecimal的概述
* 由于在运算的时候,float类型和double很容易丢失精度,演示案例。
* 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal
* 不可变的、任意精度的有符号十进制数。
* B:构造方法
* public BigDecimal(String val)
BigDecimal b1 = new BigDecimal("0.09");
BigDecimal b2 = new BigDecimal("0.01");
* C:成员方法
*public BigDecimal add(BigDecimal augend) 加法
* public BigDecimal subtract(BigDecimal subtrahend) 减法
* public BigDecimal multiply(BigDecimal multiplicand) 乘法
* public BigDecimal divide(BigDecimal divisor) 除法
* public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) 除法
对于以上四个方法都可以通过APT查询到其使用方法,和BigInteger类似,大家可以自行研究一下
###0716_常见对象(Date类的概述和方法使用)
* A:Date类的概述
* 类 Date 表示特定的瞬间,精确到毫秒。
* B:构造方法
* public Date()
* public Date(long date)
* C:成员方法
* public long getTime()
* public void setTime(long time)
方法演示:
//Date 转换成 long类型
Date d = new Date();
long time = d.getTime();
System.out.println(time);//1430817126261
//long类型转换成Date类型
Date d2 = new Date(1430817126261L);
System.out.println(d2);
//构造方法的使用
Date d3 = new Date();
//设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
d3.setTime(1430817126261L);
System.out.println(d3);
###07.17_常见对象(SimpleDateFormat类实现日期和字符串的相互转换)
* A:DateFormat类的概述
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
* B:SimpleDateFormat构造方法
* public SimpleDateFormat()
* public SimpleDateFormat(String pattern)
* C:成员方法
* public final String format(Date date)
* public Date parse(String source)
SimpDateFormat的出现让我们可以将时间的显示能够更清楚,更方便的理解,如:
//创建时间字符串
String time = "2015年05月05日 17:25:52";
//创建日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//通过/通过日期格式化对象,将时间字符串 转换成 日期对象
Date d = sdf.parse(time);
System.out.println(d);
}
private static void method1() {
//创建日期格式化对象
//SimpleDateFormat sdf = new SimpleDateFormat();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//创建日期对象
Date date = new Date();
//通过日期格式化对象,将日期 格式化成 我们能看懂的格式
String str = sdf.format(date);
System.out.println(str);
###07.18_常见对象(Calendar类的概述和获取日期的方法)
* A:Calendar类的概述
* Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
* B:成员方法
* public static Calendar getInstance()
* public int get(int field)
###07.19_常见对象(Calendar类的add()和set()方法)
* A:成员方法
* public void add(int field,int amount)
* public final void set(int year,int month,int date)
* B:案例演示
* Calendar类的成员方法使用
//获取日历对象
Calendar c = Calendar.getInstance();
printCalendar(c);
//要从当前日历时间减去 3 天
c.add(Calendar.DAY_OF_MONTH, -3);
//要从当前日历时间减去 3月
//c.add(Calendar.MONTH, -3);
//将给定的日历字段设置为给定值。
//c.set(Calendar.DAY_OF_MONTH, 20);//设置的天
//c.set(Calendar.MONTH, 6);//设置的月 (0-11), 6代表的7月
//c.set(Calendar.YEAR, 2016);//设置的年
printCalendar(c);
}