StringBuilder&正则表达式&日期类总结

发布时间 2023-12-28 20:48:43作者: ZWJAS

总结

StringBuilder:可以改变的字符串

底层:使用的是一个byte类型的数组,默认长度16
如果超过16,数组会自动扩容
扩容的时机:当添加的数据的长度大于此时数组的长度
扩容的机制:当前数组长度的2倍 + 2

  1. 构造方法:
    StringBuilder()
    构造一个没有字符的字符串构建器,初始容量为16个字符。

    // 创建StringBuilder的对象
      StringBuilder sb = new StringBuilder();
      int len = sb.capacity();// 获取底层数组的长度
      System.out.println(len);
    

    StringBuilder(String str)
    构造一个初始化为指定字符串内容的字符串构建器。

     StringBuilder sb2 = new StringBuilder("abcde");// 将String类型“abc”转换为StringBuilder
     System.out.println(sb2.capacity());
    
  2. 常用的方法:
    append(boolean b) :追加(在尾部加上)

     StringBuilder sb = new StringBuilder();
     // 在尾部追加
       sb.append("abc");
       sb.append(123);
       System.out.println(sb);
     // StringBuilder是可以改变字符串,正常是不用返回值,但是在append方法里面有返回值值,返回值类型还是StringBuilder
     // 这种设计是为了能提供链式开发
     sb.append("abc").append("www").append(true);
     System.out.println(sb);
    

    capacity() 返回当前容量
    delete(int start, int end) 删除此序列的子字符串中的字符。

     sb.delete(0,3);
            System.out.println(sb);
    

    deleteCharAt(int index) 删除 char在这个序列中的指定位置。

    sb.deleteCharAt(0);
            System.out.println(sb);
    

    insert(int offset, boolean b) 将 boolean参数的字符串表示插入到此序列中。

      sb.insert(1,false);
            System.out.println(sb);
    

    replace(int start, int end, String str) 用指定的String中的字符替换此序列的子字符串中的 String 。

     sb.replace(1,6,"FALSE");
            System.out.println(sb);
    

    reverse() 导致该字符序列被序列的相反代替。

     sb.reverse(); // 翻转
            System.out.println(sb);
    

    setCharAt(int index, char ch) 指定索引处的字符设置为 ch 。

       sb.setCharAt(0,'我');
            System.out.println(sb);
    

    trimToSize() 尝试减少用于字符序列的存储。

      sb.trimToSize();
            System.out.println(sb.capacity());
            System.out.println(sb.length());
    
  3. 使用StringBuilder

    // 设计一个方法讲解数组的元素拼接为字符串
        public static String getElements(int[] nums) {
            // 拼接字符串:+,使用StringBuilder的append()
            StringBuilder sb = new StringBuilder();
            for (int num : nums) {
                sb.append(num);
            }
            // 返回结果
            return sb.toString();
        }
    
        public static void main(String[] args) {
            String str = "vxc3245324sddsgdf的方式更多发给是否跟得上343dxsfdsfgd";
            // 将str首位加上 hello
            StringBuilder sb = new StringBuilder(str);
            str = sb.insert(0, "hello").append("hello").delete(15,26).toString();
            System.out.println(str);
    
        }
    

正则表达式

正则表达式:就是用一个特定格式来表示某种数据
作用:用校验数据是否满足某个要求

在java中怎样写正则表达式:所有的正则表达式都是一个String类型数据
String regex = "[写一些特定格式的数据]";
0-9:任意一个数字
a-z:任意一个小写字母
A-Z:任意一个大写字母
\u4e00-\u9fa5:任意的一个汉字

正则表达式怎样表示个数
"[正则的数据]{个数}"
"[0-9]{2}":任意的2个数字
“[0-9]{2,15}”:任意的2个到15个之间个数的数字
"[0-0]{1,}":任意个数的数字(1个以上)

在java那些方法支持正则表达式,在String里面有几个方法
1、matches(String regex) :判断指定字符串数据是否满足传入的正则格式
2、replaceAll(String regex, String replacement):将匹配上正则表达式的数据替换成replacement

    public static void main(String[] args) {
        String str = "5654654675756765768";
        // 声明一个正则表达式
        String regex = "[0-9]{1,}";
        // 使用正则表达式
        boolean matches = str.matches(regex);// 判断str是否是0-9之间的任意一个数字
        System.out.println(matches);

        String regex2 = "[a-z]{1,}";
        String regex3 = "[a-zA-Z]{1,}";
        String regex4 = "[\u4e00-\u9fa5]{1,}";
        System.out.println("你们好32423".matches(regex4));
        String str = "d2gf3fdsgfd44dsfsd567dsfdsf123432345325ff";
        // 将str中一个数字替换为“”
        str = str.replaceAll("[0-9]{2}","我");
        System.out.println(str);

    }
public static void main(String[] args) {
      String regex = "[\\D]"; // \d:任意的一个数字  \D:任意一个非数字
      String regex = "[^0-9]"; // [0-9]:任意的一个数字 [^0-9]:
      String regex = "[0-9a-zA-Z]"; // [0-9a-zA-Z]:任意的一个数字或者大小写字母
      String regex = "[\\w]"; // \w:任意的一个数字或者大小写字母
      String regex = "[\\W]";
      String regex = "[^0-9a-zA-Z]";
      String str = "a";
      String regex = "[^\u4e00-\u9fa5]";
      System.out.println(str.matches(regex));

      String regex = "[0-9]{n,}"; // {n}:固定个数,{n,m}:最少n个,最多m个,{n,}:至少n个
    // 表示个数的通配符:?:0个或1个  *:0个或多个   +:至少1个
      String regex = "[0-9]+";
      System.out.println("13325436547547547547547547".matches(regex));

    // 以声明开头
      String regex = "^[1][0-9]{10}"; // ^[]:以这个内容做开头
      System.out.println("1724324444".matches(regex));
    // 以声明结尾
    String regex = "^[1][0-9]{6}[.com]{4}$";
    System.out.println("1724323.net".matches(regex));

    // String:matches()、replaceAll():正则匹配来替换、replaceFirst():正则匹配第一个、spilt():使用正则表达式来分割
      String str = "143t675467547y5";
      String regex = "[a-zA-Z]";
      String s2 = str.replaceFirst(regex, "");
      System.out.println(s2);
      String str = "123a456b789cc234ffff777"; // 分割字符串,等到所有的数字子串
      String[] split = str.split("[a-z]{1,}");
      System.out.println(Arrays.toString(split));

Date:日期类

我们要操作的日期其实是某个瞬间:年月日 时分秒
Date:java.util
Date:就是表示日期的一瞬间

  1. 构造方法
    Date() 获取当前的系统时间。
    Date(long date):通过传入毫秒数,转换为对应日期

  2. 常用方法
    setTime(long time):将date的日期设置为传入的毫秒数对应的日期
    getTime() :将date转换为毫秒数

     public static void main(String[] args) {
            // 1、获取当前的系统日期
            Date date = new Date(); // 显示的格式和中国人堵塞习惯不符
            System.out.println(date);
            Date date1 = new Date(3254646546754L);
            System.out.println(date1);
            long time = date.getTime();
            System.out.println(time);
            date.setTime(3456436546754L);
            System.out.println(date);
    
        }
    

SimpleDateFormat:日期格式化的类

  1. 将日期设置成我们能看懂的格式

    • 格式化中表示的符号:
      y:年
      M:月
      d:日
      H:时
      m:分
      s:秒

    • 日期的格式:
      yyyy:四位的年份(2023)
      yy:两位的年份(23)
      MM:两位月份(12)
      dd:两位的号数
      HH:两位的小时
      mm:两位的分钟
      ss:两位秒数

    • 日期显示格式其实就是上面的日期格式的拼接
      "yyyy-MM-dd HH:mm:ss"
      "yyyy/MM/dd HH:mm:ss"
      "yyyy年MM月dd日 HH时mm分ss秒"

  2. 构造方法
    SimpleDateFormat():默认格式
    SimpleDateFormat(String pattern) 使用设置的格式

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 创建一个带自定义格式的日期格式化对象
    Date date = new Date();
    
  3. 常用方法:
    format(date):格式化日期的方法

    // 格式化当前日期
    String format = sdf.format(date);
    System.out.println(format);
    

    ​ parse(date):将一个字符串表示日期,转换为Date类型

    // 将 “2024-02-09 00:00:00”转化为Date
    Date parse = sdf.parse("2024-02-10 00:00:00"); // 注意:字符串的格式和sdf里面设置格式一致
    System.out.println(parse);
    

Calendar:日历类

这个进行日期的运算(加减日期)
Calendar: 是一个抽象类

  1. 创建Calendar对象调用:getInstance()

  2. 认识Calendar常用的字段(常量):
    YEAR:表示Calendar这类中年字段(属性),通过get(YEAR)获取年的数据
    MONTH:表示Calendar这类中月份字段(属性),通过get(MONTH)获取月份的数据,注意:月份从0开始,获取的月份的数据比实际少1
    DAY_OF_MONTH:表示Calendar这类中号数字段(属性)

    HOUR:小时字段
    MINUTE:分钟字段
    SECOND:秒的字段

  3. 常用的方法
    getInstance()

    Calendar cal = Calendar.getInstance(); // 创建了一个Calendar对象
    

    ​ get(int field):根据传入的字段,获取对应的数据

      // 获取年月日 时分秒
            int y = cal.get(Calendar.YEAR);// 获取年的数据
            System.out.println(y);
            int month = cal.get(Calendar.MONTH) + 1;
            System.out.println(month);
            int d = cal.get(Calendar.DAY_OF_MONTH);
            System.out.println(d);
    
            System.out.println(cal.get(Calendar.HOUR));
            System.out.println(cal.get(Calendar.MINUTE));
            System.out.println(cal.get(Calendar.SECOND));
    

    ​ set(int field, int value) :设置对应字段的数据

    cal.set(Calendar.YEAR,2024);
    cal.set(Calendar.MONTH,12);
    

    ​ add(int field, int amount) :对传入的字段进行运算,amount是正数就是加法,amount是 负数就是做减法
    ​ getTime():将Calendar对象转换Date类型

    Calendar cal = Calendar.getInstance(); // 创建了一个Calendar对象
    Date date = cal.getTime();
    

    ​ setTime():将Date对象转换Calendar类型

    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);