java基础笔记08-String、Array、日期

  1. String类是保存字符串常量的,每次更新都需要重新开辟空间,效率较低。可以使用StringBuilder和StringBuffer。
  2. String类方法
  • equals:区分大小写判断内容是否相等
  • equalsIgnoreCase:忽略大小写判断内容是否相等
  • length:返回字符的个数
  • indexOf:返回字符在字符串中第一次出现的索引,找不到返回-1
  • lastIndexOf:返回字符在字符串中最后一次出现的索引,找不到返回-1
  • substring:返回指定范围的字符串
String name = "hello, 张三";
System.out.println(name.substring(6));//从索引6开始截取,输出张三
System.out.println(name.substring(2, 5));//从索引2开始截取,截取到索引5-1,输出llo
  • toUpperCase:转换成大写
  • toLowerCase:转换成小写
  • concat:拼接成字符串
  • replace:替换字符串中的字符
  • split:分割字符串,某些分割字符需要转义
  • toCharArray:转换成字符数组
  • String.format():格式化字符串
  1. StringBuffer类
  • StringBuffer代表可变的字符序列,可以对字符串内容进行增删
  • 直接父类:AbstractStringBuilder
  • 实现了Serializable,即可以串行化,保存到文件或网络传输
  • 父类中AbstractStringBuilder 有属性 char[] value,不是final,该value数组用来存放字符串内容,因此存放在堆中
  • StringBuffer是一个final类,不能被继承
  1. String vs StringBuffer
  • String保存的是字符串常量,里面的值不可更改,每次String类的更新实际上就是更改地址,效率较低// private final char[] value;
  • StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer更新就是更改值,不用每次更新地址,效率较高// char[] value;存在堆中(空间大小不够时需要更新地址)
  1. StringBuffer常用方法
  • append增
  • delete(start, end) 删除索引 >=start && <end处的字符
  • replace(start, end, 新的字符串) 用新的字符串替换[start, end)的字符
  • indexOf(字符串) 查找指定子串在字符串第一次出现的索引,找不到返回-1
  • insert(索引,字符串) 在该索引位置插入字符串
  1. StringBuilder类
  • 不保证同步,非线程安全
  • 被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时
  • 建议优先采用该类,大多数情况下比StringBuffer更快
  • 主要操作是append和insert方法
  • 继承AbstractStringBuilder,实现了Serializable接口可以串行化(网络传输和保存到文件)
  • final类不能被继承
  • 字符序列仍然是存放在父类的char[] value;因此,字符序列是在堆中
  1. String vs StringBuffer vs StringBuilder
  • String:不可变字符序列,效率低但复用率高
  • StringBuffer:可变字符序列,效率较高,线程安全
  • StringBuilder:可变字符序列,效率最高,线程不安全
    如果要对字符串做大量修改,不要使用String。
    如果字符串很少修改,被多个对象引用,可以使用String。
  1. Math的方法(都是静态)
  • Math.abs(-9)求绝对值
  • Math.pow(2, 4) 2的4次方
  • Math.ceil(-3.0001) 向上取整,返回大于等于该参数的最小整数(转成double)
  • Math.floor(-4.9) 向下取整,返回小于等于该参数的最大整数(转成double)
  • Math.round(-5.51)四舍五入
  • Math.sqrt(9)开平方
  • Math.random()返回的是0<= x <1之间的小数
  • Math.max() Math.min()返回最大值和最小值
  1. Arrays类方法
  • Arrays.toString(arr) 返回数组的字符串形式
  • Arrays.sort()(自然排序和定制排序)
// 定制排序
Arrays.sort(integers, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
});
  • binarySearch二分搜索法进行查找,要求必须排好序
  • Integer newArr = Arrays.copyOf(arr, arr.length)// 从arr数组中拷贝arr.length个元素到newArr中,拷贝的长度大于arr.length,就在新数组后面增加null;底层调用的是System.arraycopy
  • Arrays.fill(numArr, 99)// 将numArr填充为99
  • equals比较两个数组元素是否一致
  • asList 将一组值,转换为list
    List arrList = Arrays.asList(2, 3, 4, 5);
  1. System方法
  • System.currentTimeMillis() //返回当前时间距离1970-01-01的毫秒数
  • System.gc() //运行垃圾回收机制,手动调用垃圾回收器,垃圾回收器在忙的话不一定成功
  1. 大数处理方案
BigInteger integer = new BigInteger("237888888888888888888");
// 对BigInteger进行加减乘除时,不可以直接+,要使用对应的方法 add substact multiply divide 
BigDecimal bigDecimal = new BigDecimal("1999.1111111233344444");
bigDecimal.divide(bigDecimal2) // 如果除不尽会抛出ArithmeticException
// 可以通过调用divide方法时,指定精度,BigDecimal.ROUND_CEILING会保留分子的精度
bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING)
  • BigInteger适合保存比较大的整型
  • BigDecimal适合保存精度更高的浮点数
  1. 第一代日期类Date类
// Date 精确到毫秒
// SimpleDateFormat 格式化和解析日期的类
Date d1 = new Date();
// 1. 获取当前系统时间
// 2. java.util.Date
// 3. 默认输出日期格式是国外格式,需要转换
System.out.println(d1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1);
System.out.println(format);

// Tue Apr 12 08:31:51 CST 2022
// 2022年04月12日 08:31:51 星期二

// 通过毫秒数获取时间
Date d2 = new Date(9234567);
// String 转成 Date
String s = "2022年04月12日 08:31:51 星期二";
Date parse = sdf.parse(s);
  1. 第二代日期类
  • Calender是一个抽象类,通过getInstance()获取实例
  • 提供大量字段和方法
Calendar c = Calendar.getInstance();
System.out.println(c);
// 输出年
System.out.println(c.get(Calendar.YEAR));
// 输出月 Calender月是从0开始
System.out.println(c.get(Calendar.MONTH)+1);
// 输出日
System.out.println(c.get(Calendar.DAY_OF_MONTH));
// 输出时(24小时制,使用Calendar.HOUR_OF_DAY 
System.out.println(c.get(Calendar.HOUR));
// 没有专门的格式化方法,需要自己组合输出
  1. 第三代日期类
  • Calendar类的问题是可变性、月份从0开始、Calendar没有专门格式化、不是线程安全的、不能处理闰秒
  • JDK8加入LocalDate(只包含年月日)、LocalTime(只有时分秒)、LocalDateTime(年月日+时分秒)
// 使用now返回当前日期时间的 对象
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
// 输出年
System.out.println(localDateTime.getYear());
// 输出月
System.out.println(localDateTime.getMonth());
System.out.println(localDateTime.getMonthValue());

// 格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dtf.format(localDateTime);
System.out.println("格式化的字符串="+format);
  • Instant 时间戳 提供与Date的转换
Instant instant = Instant.now();
System.out.println(instant);
Date date = Date.from(instant); 
System.out.println(date);
Instant instant1 = date.toInstant();

LocalDateTime类的更多方法

  • 检查是否是闰年
  • plus增加时间的某个部分
  • minus查看一年前和一年后的日期
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值