文章目录

  • Day14
    • 一、 正则表达式
    • 二、Pattern类 及 Matcher
    • 三、 日期时间类
      • Date类
      • SimpleDateFormat类
      • Calendar类
    • 四、 Math类
    • 五、静态导入(了解)
    • 六、Random类
    • 七、 System类
    • 八、Runtime类
    • 九、BigInteger类和BigDecemal

Day14

一、 正则表达式

含义:用来描述或者匹配一系列符合某个语句规则的字符串

字符
x 字符 x
// 反斜线字符
/t 制表符 ('/u0009')
/n 新行(换行)符 ('/u000A')
/r 回车符 ('/u000D')
/e 转义符 ('/u001B')
. 任意字符
字符类
[abc] abc(简单类)
[^abc] 任何字符,除了 abc(否定)
[a-zA-Z] azAZ,两头的字母包括在内(范围)
[a-d[m-p]] admp[a-dm-p](并集)
[a-z&&[def]] def(交集)
[a-z&&[^bc]] az,除了 bc[ad-z](减去)
[a-z&&[^m-p]] az,而非 mp[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
/d 数字:[0-9]
/D 非数字: [^0-9]
/s 空白字符:[ /t/n/x0B/f/r]
/S 非空白字符:[^/s]
/w 单词字符:[a-zA-Z_0-9]
/W 非单词字符:[^/w]
边界匹配器
^ 行的开头
$ 行的结尾
/b 单词边界
/B 非单词边界
/A 输入的开头
/G 上一个匹配的结尾
/Z 输入的结尾,仅用于最后的结束符(如果有的话)
/z 输入的结尾
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超过 m
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n
X{n,}? X,至少 n
X{n,m}? X,至少 n 次,但是不超过 m
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n
X{n,}+ X,至少 n
X{n,m}+ X,至少 n 次,但是不超过 m
Logical 运算符
XY X 后跟 Y
X|Y XY
(X) X,作为捕获组

字符类运算符的优先级如下所示,按从最高到最低的顺序排列:

1 字面值转义 /x
2 分组 [...]
3 范围 a-z
4 并集 [a-e][i-u]
5 交集 [a-z&&[aeiou]]

案例:把一个字符串中带电话号码替换成130****1111

 String str = "小红13012341111,小绿15112342222";String regex = "(1\\d{2})(\\d{4})(\\d{4})";str = str.replaceAll(regex, "$1****$3");System.out.println(str);

二、Pattern类 及 Matcher

Pattern:代表正则表达式的匹配模式

Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持

案例1:校验QQ邮箱

    String str = "1445584980@qq.com";String regex = "\\d{5,11}@qq\\.com";//boolean matches = str.matches(regex);**boolean** matches = Pattern.*matches*(regex , str);System.***out\***.println(matches);

案例2:分隔路径

     String str = "C:\\资源\\日韩\\波多野结衣.avi";String regex = ":?\\\\";//String[] split = str.split(regex);Pattern pattern = Pattern.*compile*(regex);//创建匹配模式对象String[] split = pattern.split(str);**for** (String s : split) {System.***out\***.println(s);}

案例3:Pattern+Matcher 找到前端代码中的图片路径

 String str = "<img src='hhy/aaa.jpg'/><div><div/> <input type='image' src='submit.gif' /><img src='bbb.jpg'/>";String regex = "<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b)[^>]*>";Pattern pattern = Pattern.compile(regex);//创建匹配模式对象Matcher matcher = pattern.matcher(str);//获取匹配结果//   System.out.println("在字符串中是否整个匹配:" + matcher.matches());//   System.out.println("在字符串中是否开头就匹配:" + matcher.lookingAt());//   System.out.println("在字符串中是否有包含匹配:" + matcher.find());while(matcher.find()){System.out.println(matcher.group()); //matcher.group(2)-->获取正则表达式里第二个括号(组)里的内容System.out.print("start:"+matcher.start()); System.out.println(" end:"+matcher.end());}

**总结:**Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matches(String regex,CharSequence input)一种最基础最简单的匹配。

三、 日期时间类

Date类

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

 Date date1 = new Date();//星期   月份  日     时:分:秒   时区       年份//Thu Jan 21 10:41:31 CST 2021System.out.println(date1);//自1970年1月1日0:0:0 往后退1000毫秒Date date2 = new Date(1000);System.out.println(date2);

SimpleDateFormat类

将显示的日期信息格式化

 //创建格式化日期类的对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//将Date对象 格式化 字符串String format = sdf.format(new Date());System.out.println(format);//将字符串 解析成 Date对象Date date = sdf.parse("2021年01月21日 10:61:57");System.out.println(date);

Calendar类

Calendar类(日历)是一个抽象基类,主要用于完成日期字段之间相互操作的功能。即可以设置和获取日期数据的特定部分。

 //获取日历类的对象Calendar c = Calendar.getInstance();//获取对应的数据int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int day = c.get(Calendar.DAY_OF_MONTH);int hour = c.get(Calendar.HOUR);int minute = c.get(Calendar.MINUTE);int second = c.get(Calendar.SECOND);System.out.println(year);System.out.println(month);System.out.println(day);System.out.println(hour);System.out.println(minute);System.out.println(second);

四、 Math类

Math 类提供了一序列基本数学运算和几何函数的方法。

Math类是final类,并且它的所有成员变量和成员方法都是静态的。

 System.out.println("求平法:" + Math.pow(3, 2));System.out.println("求平法根:" + Math.sqrt(9));System.out.println("求绝对值:" + Math.abs(-100));System.out.println("向下取整:(地板)" + Math.floor(1.9));System.out.println("向上取整:(天花板)" + Math.ceil(1.1));System.out.println("最大值:" + Math.max(10, 20));System.out.println("最小值:" + Math.min(10, 20));System.out.println("四舍五入:" + Math.round(1.4));System.out.println("获取随机数(0包含~1不包含):" + Math.random());

获取 1~100的随机数

System.out.println("获取随机数(1~100):" + ((int)(Math.random()*100)+1));

面试题:abs可能出现负数吗?

System.out.println(Math.abs(Integer.MAX_VALUE+1));

五、静态导入(了解)

当使用一个类里面的静态方法或者静态变量时,每次都需要写类名。如果不想写类名,想直接写方法名或者变量名,则可以考虑使用静态导入

语法:import static 包名.类名.*; //导入该类下的所有静态方法和常量

例如:import static java.lang.Math.*; //导入Math下的所有方法和变量(包括常量)

则代码中可以直接使用方面和变量名,而不需要前缀Math

如:max(3,4);

六、Random类

  • 创建Random类对象

    此类用于生成随机数:

    Random(); 创建一个新的随机数生成器

    Random(long seed);种子数(重点理解工作原理,什么是伪随机数)

  • 随机类 - 常用方法

 //创建随机类的对象Random ran = new Random();System.out.println("随机出int数字:" + ran.nextInt());System.out.println("随机出int数字:" + ran.nextInt(10));//随机出0包含~10不包含System.out.println("随机出double数字:" + ran.nextDouble());System.out.println("随机出boolean数据:" + ran.nextBoolean());
  • 需求:点名器
 String[] names = {"杨晨","陈希","邓静涵","王永琪"};Random ran = new Random();int index = ran.nextInt(names.length);System.out.println(names[index]);
  • 理解随机类的种子数

    种子数固定,随机出的值也是固定的

 Random ran = new Random(1000);System.out.println(ran.nextInt(10));MyRandom myRandom = new MyRandom(1000);System.out.println(myRandom.nextInt(10));

七、 System类

Java程序的运行平台

1、 System类提供了一些静态属性和方法,允许通过类名直接调用。

2、 System类提供了代表标准输入、标准输出、错误输出的类属性。

System类提供了一些静态方法用于访问环境变量、系统属性的方法。

  • System静态属性

          //获取系统标准的输入流(方向:控制台->程序)InputStream in = System.in;Scanner scan = new Scanner(in);String str = scan.next();scan.close();//打印流(系统标准的输出流)(方向:程序->控制台)//        PrintStream out = System.out;
    //      out.println(str);//打印流(系统标准的错误输出流)(方向:程序->控制台)PrintStream err = System.err;err.println(str);
  • 研究System.out 和 System.err

    结论:
    System.out 和 System.err 是两个线程,哪个线程抢到CPU资源
    哪个线程就运行,所以多线程的程序随机性很强

       System.out.println("小明");System.err.println("小红");System.out.println("小强");
    
  • System的方法

    1. public static void exit(int status) 退出当前虚拟机

    2. public static long currentTimeMillis() 获得当前系统的毫秒值(与1970 年 1 月 1 日午夜之间的时间差)–测试程序的消耗时间

    3. public static Properties getProperties() 获得当前的所有系统属性

    4. public static String getProperty(String key) 获得指定键的系统属性

    5. public static void setIn(InputStream in) 输入重定向

    6. public static void setOut(PrintStream out) 输出重定向

    7. public static void setErr(PrintStream err) 错误重定向

    8. public static void arraycopy([Object](mk:@MSITStore:C:\Users\hehanyu\Desktop\jdk api 1.8_google.CHM::/java/lang/Object.html) src,int srcPos, [Object](mk:@MSITStore:C:\Users\hehanyu\Desktop\jdk api 1.8_google.CHM::/java/lang/Object.html) dest, int destPos, int length)拷贝数组

 //退出当前虚拟机//System.exit(0);//获取系统参数Properties properties = System.getProperties();System.out.println(properties);//获取指定键上的值String value = System.getProperty("os.name","默认值");System.out.println(value);

八、Runtime类

Runtime代表Java程序的运行时环境,可以通过 getRuntime 方法获取当前运行时。

​ 应用程序不能自己创建Runtime对象,可以通过Runtime的静态方法getRuntime()获得Runtime对象。

Runtime类可以访问jvm的相关信息,如处理器数量,内存信息等

 //获取到运行环境类Runtime run = Runtime.getRuntime();System.out.println("获取最大内存量(字节):" + run.maxMemory());System.out.println("获取闲置内存量(字节):" + run.freeMemory());System.out.println("获取处理数:" + run.availableProcessors());
 * 消耗内存可能负数的情况吗?* 有可能,因为java的垃圾回收器会时时监听有没有没用的对象或变量,如果及时回收了,那么endMemory有可能比startMemory还更大

九、BigInteger类和BigDecemal

整数类型的大数值运算类

 BigInteger big1 = new BigInteger("20000000000000000000000000000000");BigInteger big2 = new BigInteger("10000000000000000000000000000000");System.out.println("加法:" + big1.add(big2));System.out.println("减法:" + big1.subtract(big2));System.out.println("乘法:" + big1.multiply(big2));System.out.println("除法:" + big1.divide(big2));

小数类型的大数值运算

 BigDecimal big1 = new BigDecimal("0.5");BigDecimal big2 = new BigDecimal("0.4");System.out.println("加法:" + big1.add(big2));System.out.println("减法:" + big1.subtract(big2));System.out.println("乘法:" + big1.multiply(big2));System.out.println("除法:" + big1.divide(big2));
 BigDecimal big1 = new BigDecimal("10");BigDecimal big2 = new BigDecimal("3");System.out.println("除法:" + big1.divide(big2, 2, BigDecimal.ROUND_HALF_UP));

理解BigInteger

 MyBigInteger big1 = new MyBigInteger("500000050");MyBigInteger big2 = new MyBigInteger("500000050");System.out.println("加法:" + big1.add(big2));
public class MyBigInteger {private String value;public MyBigInteger(String value) {this.value = value;}public MyBigInteger add(MyBigInteger big){//转换为字符数组char[] v1 = this.value.toCharArray();char[] v2 = big.value.toCharArray();//获取最后的下标int index1 = v1.length-1;int index2 = v2.length-1;int num = 0;//进位StringBuilder sb = new StringBuilder();while(index1 >= 0 || index2 >= 0){int num1 = 0;int num2 = 0;if(index1 >= 0){num1 = Integer.parseInt(String.valueOf(v1[index1]));}if(index2 >= 0){num2 = Integer.parseInt(String.valueOf(v2[index2]));}int result = num1 + num2 + num;if(result >= 10){num = 1;result = result%10;}else{num = 0;}index1--;index2--;sb.append(result);}if(num == 1){sb.append(1);}sb.reverse();//反转return new MyBigInteger(sb.toString());}@Overridepublic String toString() {return value;}
}

Day14-正则表达式及常用类相关推荐

  1. 正则表达式、常用类(Pattern类、Matcher类、Math类、System类、Random类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类)

    JAVA学习第十六天-正则表达式.常用类(Pattern类.Matcher类.Math类.System类.Random类.BigDecimal类.Date类.SimpleDateFormat类.Cal ...

  2. JAVA正则表达式及常用类

    1:正则表达式(理解) (1)就是符合一定规则的字符串 (2)常见规则 A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ( ...

  3. c#中regex的命名空间_C#_详解C#正则表达式Regex常用匹配,使用Regex类需要引用命名空间 - phpStudy...

    详解C#正则表达式Regex常用匹配 使用Regex类需要引用命名空间:using System.Text.RegularExpressions; 一.利用Regex类实现验证 示例1:注释的代码所起 ...

  4. StringBuffer+排序+二分查找+包装类+正则表达式+常用类

    一.StringBuffer 1.概述 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.而StringBuffer就可以解决这个问题StringBuffe ...

  5. 【Java笔记】---Week06 常用类、正则表达式与集合

    写在前面的部分 本周主要学习了以下几个部分,一个是继续学习了常用类的相关知识,第二个学习了正则表达式,然后简单学习了集合方面的知识,扩充补充了二分查找方面的知识 一.常用类 1.System类 Sys ...

  6. Lession10 常用类(正则表达式、Date Time结构、string类、Math类)

    Date Time结构: using System;namespace ConsoleApp1 //Date_Time_结构 {class Program{static void Main(strin ...

  7. Hbase API中常用类介绍和使用

    网上Hbase的介绍有很多,案例也不少.自己写了个Demo,进行一些简单的总结. HBase 常用类介绍. JAVA API 和 HBase数据库模型之间的关系 JAVA 类 Hbase 数据模型 H ...

  8. java 向上取整_java 中的异常处理和常用类使用

    一.异常: 1.异常的简单介绍: Throwable类 / Error Exception | | Unchecked Checked Runtime Exception Exception Exce ...

  9. java正则表达式对象_Java正则表达式之Pattern类

    java.util.regex.Pattern类指正则表达式的编译表示形式.即将你的正则表达式字符串编译成java正则表达式对象.所有的正则表达式字符串在使用前都必须先编译成Pattern类的实例.然 ...

  10. Java异常处理和常用类

    1.异常 异常:在Java中是指被一个方法抛出的对象. 分类: 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指Exception和其子 ...

最新文章

  1. POJ 3376 Finding Palindromes(扩展kmp+trie)
  2. 分享:Svg文件转换为图片(调用 Inkscape 命令行)
  3. android界面基本属性
  4. 推荐7本EEG领域值得阅读的书籍
  5. pyspark启动时卡住了
  6. SP703 SERVICE - Mobile Service[DP]
  7. k8s包管理器helm_K8S 实战(十九)| K8S 包管理 Helm
  8. vscode创建代码片段
  9. ArrayList 类方法toArray的一点疑惑
  10. CDH修改PySpark默认的Python版本
  11. 「 LaTex 」 写论文,如何插入参考文献讲解
  12. 债券收益率预测模型_利率预测模型系列之一:简单的N-S模型运用
  13. 影响英语单词拼写的6大因素
  14. STM32F103_study51_The punctual atoms(STM32 Timer interrupt )
  15. Android 微信支付总结
  16. stm32用什么软件编辑呢
  17. NAND_FLASH_内存详解与读写寻址方式
  18. 金蝶记账王、迷你版、标准版引入凭证方法
  19. csp试题2:二十四点
  20. IC卡数据编辑分析软件-M1卡分析助手

热门文章

  1. 跳马问题C++递归调用
  2. FTPserver 配置
  3. @NotNull 和 @NotEmpty 和@NotBlank 区别
  4. 资源吧网站模板下载织梦cms精仿资源吧网站模板
  5. meta标签中的http-equiv属性
  6. file-saver 实现文件下载
  7. edp协议 netty_使用esp8266 arduino 通过EDP协议 将数据传递到onenet平台
  8. 开源定时任务管理系统gocron解析,轻松做好定时任务调度处理
  9. JavaScript的事件委托(事件代理)原理
  10. liferay-protal学习1-配置开发环境