正则表达式(部分代码省去了包名!!!)
正则表达式的概述与简单使用
* A:正则表达式
* 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
* 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
* B:案例演示
* 需求:校验qq号码.
* 1:要求必须是5-15位数字
* 2:0不能开头
* 3:必须都是数字
* a:非正则表达式实现
* b:正则表达式实现
1 public class Demo1_Regex { 2 3 public static void main(String[] args) { 4 System.out.println(checkQQ("012345")); 5 System.out.println(checkQQ("a1b345")); 6 System.out.println(checkQQ("123456")); 7 System.out.println(checkQQ("1234567890987654321")); 8 9 String regex = "[1-9]\\d{4,14}"; 10 System.out.println("2553868".matches(regex)); 11 System.out.println("012345".matches(regex)); 12 System.out.println("2553868abc".matches(regex)); 13 } 14 15 /* 16 * 需求:校验qq号码. 17 * 1:要求必须是5-15位数字 18 * 2:0不能开头 19 * 3:必须都是数字 20 * 校验qq 21 * 1,明确返回值类型boolean 22 * 2,明确参数列表String qq 23 */ 24 public static boolean checkQQ(String qq) { 25 boolean flag = true; //如果校验qq不符合要求就把flag置为false,如果符合要求直接返回 26 27 if(qq.length() >= 5 && qq.length() <= 15) { 28 if(!qq.startsWith("0")) { 29 char[] arr = qq.toCharArray(); //将字符串转换成字符数组 30 for (int i = 0; i < arr.length; i++) { 31 char ch = arr[i]; //记录每一个字符 32 if(!(ch >= ‘0‘ && ch <= ‘9‘)) { 33 flag = false; //不是数字 34 break; 35 } 36 } 37 }else { 38 flag = false; //以0开头,不符合qq标准 39 } 40 }else { 41 flag = false; //长度不符合 42 } 43 return flag; 44 } 45 }
字符类演示
public class Demo2_Regex { /** * [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](减去) */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); //demo5(); //demo6(); String regex = "[a-z&&[^m-p]]"; System.out.println("m".matches(regex)); System.out.println("a".matches(regex)); System.out.println("z".matches(regex)); System.out.println("n".matches(regex)); } private static void demo6() { String regex = "[a-z&&[^bc]]"; System.out.println("a".matches(regex)); System.out.println("b".matches(regex)); System.out.println("1".matches(regex)); } private static void demo5() { String regex = "[a-z&&[def]]"; //取交集 System.out.println("a".matches(regex)); System.out.println("d".matches(regex)); } private static void demo4() { String regex = "[a-d[m-p]]"; System.out.println("a".matches(regex)); System.out.println("m".matches(regex)); System.out.println("n".matches(regex)); } private static void demo3() { String regex = "[a-zA-Z]"; System.out.println("a".matches(regex)); System.out.println("A".matches(regex)); System.out.println("z".matches(regex)); System.out.println("Z".matches(regex)); System.out.println("1".matches(regex)); System.out.println("%".matches(regex)); } private static void demo2() { String regex = "[^abc]"; System.out.println("a".matches(regex)); System.out.println("b".matches(regex)); System.out.println("c".matches(regex)); System.out.println("d".matches(regex)); System.out.println("1".matches(regex)); System.out.println("%".matches(regex)); System.out.println("10".matches(regex)); //10代表1字符和0字符,不是单个字符 } private static void demo1() { String regex = "[abc]"; //[]代表单个字符 System.out.println("a".matches(regex)); System.out.println("b".matches(regex)); System.out.println("c".matches(regex)); System.out.println("d".matches(regex)); System.out.println("1".matches(regex)); System.out.println("%".matches(regex)); } }
预定义字符类演示
public class Demo3_Regex { /** * . 任何字符 \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); //demo5(); //demo6(); String regex = "\\W"; System.out.println("a".matches(regex)); System.out.println("z".matches(regex)); System.out.println("_".matches(regex)); System.out.println("%".matches(regex)); } private static void demo6() { String regex = "\\w"; System.out.println("a".matches(regex)); System.out.println("z".matches(regex)); System.out.println("_".matches(regex)); System.out.println("%".matches(regex)); } private static void demo5() { String regex = "\\S"; System.out.println(" ".matches(regex)); System.out.println(" ".matches(regex)); System.out.println("a".matches(regex)); } private static void demo4() { String regex = "\\s"; System.out.println(" ".matches(regex)); System.out.println(" ".matches(regex)); //一个tab键 System.out.println(" ".matches(regex)); //四个空格 } private static void demo3() { String regex = "\\D"; System.out.println("0".matches(regex)); System.out.println("9".matches(regex)); System.out.println("a".matches(regex)); } private static void demo2() { String regex = "\\d"; //\代表转义字符,如果想表示\d的话,需要\\d System.out.println("0".matches(regex)); System.out.println("a".matches(regex)); System.out.println("9".matches(regex)); } private static void demo1() { String regex = ".."; System.out.println("a".matches(regex)); System.out.println("ab".matches(regex)); } }
数量词
public class Demo4_Regex { /** * Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); //demo5(); String regex = "[abc]{5,15}"; System.out.println("abcba".matches(regex)); System.out.println("abcbaabcabbabab".matches(regex)); System.out.println("abcb".matches(regex)); System.out.println("abcbaabaabcbaaba".matches(regex)); } public static void demo5() { String regex = "[abc]{5,}"; System.out.println("abcba".matches(regex)); System.out.println("abcbaabcabbabab".matches(regex)); System.out.println("abcb".matches(regex)); System.out.println("abcbaaba".matches(regex)); } public static void demo4() { String regex = "[abc]{5}"; System.out.println("abcba".matches(regex)); System.out.println("abcbaabcabbabab".matches(regex)); System.out.println("abcb".matches(regex)); System.out.println("abcbaaba".matches(regex)); } public static void demo3() { String regex = "[abc]+"; System.out.println("".matches(regex)); System.out.println("a".matches(regex)); System.out.println("aaaaabbbbccccc".matches(regex)); } public static void demo2() { String regex = "[abc]*"; System.out.println("".matches(regex)); System.out.println("abc".matches(regex)); System.out.println("a".matches(regex)); } public static void demo1() { String regex = "[abc]?"; System.out.println("a".matches(regex)); System.out.println("b".matches(regex)); System.out.println("c".matches(regex)); System.out.println("d".matches(regex)); System.out.println("".matches(regex)); } }
正则表达式的分割功能
* A:正则表达式的分割功能
* String类的功能:public String[] split(String regex)
* B:案例演示
* 正则表达式的分割功能
public class Demo5_Split { /** * @param args */ public static void main(String[] args) { String s = "胖.美米.王do给e"; String[] arr = s.split("\\."); //通过正则表达式切割字符串 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } System.out.println("11111111111111111"); } }
把给定字符串中的数字排序
package test; import java.util.Arrays; public class Test1 { /** * @param args * * A:案例演示 * 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91” * 100 * 80 * 分析: * 1,将字符串切割成字符串数组 * 2,将字符串转换成数字并将其存储在一个等长度的int数组中 * 3,排序 * 4,将排序后的结果遍历并拼接成一个字符串 */ public static void main(String[] args) { String s = "91 27 46 38 50"; //1,将字符串切割成字符串数组 String[] sArr = s.split(" "); //2,将字符串转换成数字并将其存储在一个等长度的int数组中 int[] arr = new int[sArr.length]; for (int i = 0; i < arr.length; i++) { arr[i] = Integer.parseInt(sArr[i]); //将数字字符串转换成数字 } //3,排序 Arrays.sort(arr); //4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91 /*String str = ""; for (int i = 0; i < arr.length; i++) { if(i == arr.length - 1) { str = str + arr[i]; //27 38 46 50 91 }else { str = str + arr[i] + " "; //27 38 46 50 } } System.out.println(str);*/ StringBuilder sb = new StringBuilder(); for (int i = 0; i < arr.length; i++) { if(i == arr.length - 1) { sb.append(arr[i]); }else { sb.append(arr[i] + " "); } } System.out.println(sb); } }
正则表达式的替换功能
* A:正则表达式的替换功能
* String类的功能:public String replaceAll(String regex,String replacement)
* B:案例演示
* 正则表达式的替换功能
public class Demo6_ReplaceAll { /** * * A:正则表达式的替换功能 * String类的功能:public String replaceAll(String regex,String replacement) */ public static void main(String[] args) { String s = "wo111ai222heima"; String regex = "\\d"; //\\d代表的是任意数字 String s2 = s.replaceAll(regex, ""); System.out.println(s2); } }
正则表达式的分组功能
public class Demo7_Regex { /** * * A:正则表达式的分组功能 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: * 1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。 B:案例演示 a:切割 需求:请按照叠词切割: "sdqqfgkkkhjppppkl"; b:替换 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程”。 */ public static void main(String[] args) { //demo1(); //demo2(); /* * 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程”。 */ String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程"; String s2 = s.replaceAll("\\.+", ""); String s3 = s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容 System.out.println(s3); } public static void demo2() { //需求:请按照叠词切割: "sdqqfgkkkhjppppkl"; String s = "sdqqfgkkkhjppppkl"; String regex = "(.)\\1+"; //+代表第一组出现一次到多次 String[] arr = s.split(regex); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } public static void demo1() { //叠词 快快乐乐,高高兴兴 /*String regex = "(.)\\1(.)\\2"; //\\1代表第一组又出现一次 \\2代表第二组又出现一次 System.out.println("快快乐乐".matches(regex)); System.out.println("快乐乐乐".matches(regex)); System.out.println("高高兴兴".matches(regex)); System.out.println("死啦死啦".matches(regex));*/ //叠词 死啦死啦,高兴高兴 String regex2 = "(..)\\1"; System.out.println("死啦死啦".matches(regex2)); System.out.println("高兴高兴".matches(regex2)); System.out.println("快快乐乐".matches(regex2)); } }
正则表达式的获取功能
package com.miao.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo8_Pattern { /** * Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); * A:正则表达式的获取功能 * Pattern和Matcher的结合使用 * B:案例演示 * 需求:把一个字符串中的手机号码获取出来 */ public static void main(String[] args) { //demo1(); String s = "我的手机是15511866260,我曾用过15987654351,还用过18812345610"; String regex = "1[3578]\\d{9}"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(s); /*boolean b1 = m.find(); System.out.println(b1); System.out.println(m.group()); boolean b2 = m.find(); System.out.println(b2); System.out.println(m.group());*/ while(m.find()) System.out.println(m.group()); } public static void demo1() { Pattern p = Pattern.compile("a*b"); //获取到正则表达式 Matcher m = p.matcher("aaaaab"); //获取匹配器 boolean b = m.matches(); //看是否能匹配,匹配就返回true System.out.println(b); System.out.println("aaaaab".matches("a*b")); //与上面的结果一样 } }
Pattern和Matcher的概述
* A:Pattern和Matcher的概述
* B:模式和匹配器的典型调用顺序
* 通过JDK提供的API,查看Pattern类的说明
* 典型的调用顺序是
* Pattern p = Pattern.compile("a*b");
* Matcher m = p.matcher("aaaaab");
* boolean b = m.matches();
Math类
Math类概述和方法使用
* A:Math类概述
* Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
* B:成员方法
* 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) min自学
* public static double pow(double a,double b)
* public static double random()
* public static int round(float a) 参数为double的自学
* public static double sqrt(double a)
public class Demo1_Math { public static void main(String[] args) { System.out.println(Math.PI); System.out.println(Math.abs(-10)); //取绝对值 //ceil天花板 /* * 13.0 * 12.3 * 12.0 */ System.out.println(Math.ceil(12.3)); //向上取整,但是结果是一个double System.out.println(Math.ceil(12.99)); System.out.println("-----------"); //floor地板 /* * 13.0 * 12.3 * 12.0 */ System.out.println(Math.floor(12.3)); //向下取整,但是结果是一个double System.out.println(Math.floor(12.99)); //获取两个值中的最大值 System.out.println(Math.max(20, 30)); //前面的数是底数,后面的数是指数 System.out.println(Math.pow(2, 3)); //2.0 ^ 3.0 //生成0.0到1.0之间的所以小数,包括0.0,不包括1.0 System.out.println(Math.random()); //四舍五入 System.out.println(Math.round(12.3f)); System.out.println(Math.round(12.9f)); //开平方 System.out.println(Math.sqrt(4)); System.out.println(Math.sqrt(2)); System.out.println(Math.sqrt(3)); } }
Random类
Random类概述和方法使用
* A:Random类的概述
* 此类用于产生随机数如果用相同的种子创建两个 Random 实例,
* 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
* B:构造方法
* public Random()
* public Random(long seed)
* C:成员方法
* public int nextInt()
* public int nextInt(int n)(重点掌握) 0到n-1共n个数
package com.miao.Random; import java.util.Random; public class Demo2_Random { public static void main(String[] args) { Random r = new Random(); /*int x = r.nextInt(); System.out.println(x);*/ for(int i = 0; i < 10; i++) { //System.out.println(r.nextInt()); System.out.println(r.nextInt(100)); //要求掌握,生成在0到n范围内的随机数,包含0不包含n } /* * -1244746321 1060493871 -1244746321 1060493871 */ /*Random r2 = new Random(1001); int a = r2.nextInt(); int b = r2.nextInt(); System.out.println(a); System.out.println(b);*/ } }
原文:https://www.cnblogs.com/jiashumiao/p/10368326.html