Java常用类(字符串、日期时间、比较器)

字符串相关类

String

1. 特性

import org.junit.Test;

/**
 * test1():
 * String:字符串,使用一对""引起来表示、
 * 1.String声明为final的,不可被继承
 * 2.String实现了Serializable接口:表示字符串是支持序列化的
 * 实现了Comparable接口:表示String可以比较大小
 * 3.String内部定义了final char[] value用于存储字符串数据
 * 4.String代表不可变的字符序列。简称:不可变性。
 *         体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
 *              2.对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
 *              3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域
 * 5.通过字面量的方式(区别于new)给一个字符串赋值,此时字符串值声明在字符串常量池中
 * 6.字符串常量池中不会存储相同内容的字符串
 *
 * test2():
 * Sting实例方式:①字面量定义 ②new+构造器
 * String s = new String("abc"); 在内存创建了几个对象?
 * 两个:一个是堆空间中new结构,一个是char[]对应的常量池数据"abc"
 *
 * test3():
 * 常量与常量的拼接在常量池
 * 只要其中有一个是变量,结果就在堆中
 * 如果拼接的结果调用intern()方法,返回值就在常量池中
 *
 */
public class StringTest {
    @Test
    public void test1() {
        String s1 = "abc";
        String s2 = "abc";
        s1 = "hello";

        System.out.println(s1 == s2);
        System.out.println(s1);
        System.out.println(s2);

        System.out.println("***********************");

        String s3 = "abc";
        s3 += "def";
        System.out.println(s3);
        System.out.println(s2);

        System.out.println("***********************");

        String s4 = "abc";
        String s5 = s4.replace('a', 'm');
        System.out.println(s4);
        System.out.println(s5);

    }
    @Test
    public void test2(){
        String s1 = "abc";
        String s2 = new String("abc");
        String s3 = new String("abc");
        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
    @Test
    public void test3(){
        String s1 = "javaEE";
        String s2 = "hadoop";

        String s3 = "javaEEhadoop";
        String s4 = "javaEE" + "hadoop";
        String s5 = s1 + "hadoop";
        String s6 = "javaEE" + s2;
        String s7 = s1 + s2;
        String s8 = (s1 + s2).intern();

        System.out.println(s3 == s4);//true
        System.out.println(s3 == s5);//false
        System.out.println(s3 == s6);//false
        System.out.println(s3 == s7);//false
        System.out.println(s4 == s5);//false
        System.out.println(s5 == s6);//false
        System.out.println(s5 == s7);//false
        System.out.println(s6 == s7);//false
        System.out.println(s3 == s8);//true
    }
}

2. 常用方法

方法说明
length()得到一个字符串的字符个数
charAt(int index)从字符串中取出指定索引的字符
indexOf(“字符”)返回指定字符的索引
toUpperCase()将字符串转化为大写
toLowerCase()将字符串转化为小写
split(“字符”)根据给定的正则表达式来拆分字符串
equals()比较两个字符串是否相等
compareTo()比较两个字符串大小
trim()去掉字符串首尾空格
substring(int beginIndex,int endIndex)截取字符串
equalsIgnoreCase()忽略大小写比较两个字符串的值是否相同
contains()判断字符串里面是否包含指定的内容
startsWith()测试此字符串是否以指定的前缀开始
endsWith()测试此字符串是否以指定的后缀结束
toCharArray()将字符串变成一个字符数组
getBytes()将字符串变成一个字节数组

StringBuffer/StringBuilder

1. String、StringBuffer、StringBuilder三者对比

相同点:底层使用char[ ]存储
不同点:

  1. String:不可变的字符序列。
  2. StringBuffer:可变的字符序列;线程安全,效率低。
  3. StringBuilder:可变的字符序列;线程不安全,效率高。

2. StringBuffer与StringBuilder内存解析

扩容问题:如果添加的数据底层数组盛不下,扩容为原来容量的2倍+2,同时将原数组中的元素复制到新的数组。通常开发中会在创建对象时直接在构造器中设定好所需容量大小。

3. String、StringBuffer、StringBuilder三者执行效率

StringBuilder > StringBuffer > String

4. StringBuffer、StringBuilder常用方法

方法说明
append(xxx)
delete(int start, int end)
setCharAt(int n, char ch)
replace(int start, int end, String str)
charAt(int n)
insert(int offset, xxx)
length()长度

日期时间相关类

Date

/**
* java.util.Date
* 	|--java.sql.Date
*/

//创建java.util.Date对象
Date date1 = new Date();
Date date2 = new Date(176253876724L);

//创建java.sql.Date对象
java.sql.Date date3 = new java.sql.Date(7668875343432L);

//java.util.Date对象转化为java.sql.Date对象
Date date4 = new java.sql.Date(293747834452L);
java.sql.Date date5 = (java.sql.Date) date4;

Date date6 = new Date();
java.sql.Date data7 = new java.sql.Date(date6.getTime());

SimpleDateFormat

SimpleDateFormat对日期Date类的格式化和解析

  1. 两个操作
    1.1 格式化:日期—>字符串
    1.2 解析:字符串—>日期
  2. SimpleDateFormat的实例化:new+构造器
    SimpleDateFormat sdf = new SimpleDateFormat(“时间格式”);
    String format = sdf.format(date); //格式化
    Date date1 = sdf.parse(“时间格式”); //解析

Calendar

import java.util.Calendar;

//1.实例化
Calendar calendar = Calendar.getInstance();

//常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
//set()
calendar.set(Calendar.DAY_OF_MONTH,22);
days = calendar.get(Calendar.DAY_OF_MONTH);
//add()
calendar.add(Calendar.DAY_OF_MONTH,-3);
//getTime()
Date date = calendar.getTime();
//setTime()
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);

LocalDate/LocalTime/LocalDateTime

1. 说明

LocalDate、LocalTime、LocalDateTime分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前时间信息,也不包含时区相关信息。

2. 常用方法

方法说明
now() / now(Zone zone) / of()根据当前日期时间创建对象
getXxx()获取(年/月/时/分/秒)
getDayOfXxx()获取(年份天数/月份天数/星期几)
withDayOfXxx()修改(年份天数/月份天数)
withXxx()修改(年份/月份)
plusXxx()添加(年/月/周/日/时)
minusXxx()减去(年/月/周/日/时)

Instant

1. 说明

时间线上的一个瞬时点,表示自1970-01-01 00:00:00开始。

2. 常用方法

方法说明
now()返回默认UTC时区的Instant类对象
ofEpochMilli(long epochMilli)返回1970-01-01 00:00:00加上指定毫秒数后的Instant类对象
atOffset(ZoneOffset offset)结合即时的偏移来创建一个OffsetDateTime
toEpochMilli()返回1970-01-01 00:00:00到当前时间的毫秒数

DateTimeFormatter

1. 说明

格式化或解析日期、时间

2. 常用方法

方法说明
ofPattern(String pattern)返回一个指定字符串格式的DateTimeFormatter
format(TemporalAccessor t)格式化一个日期、时间,返回字符串
parse(CharSequence text)将指定格式的字符序列解析为一个日期、时间

3. 实例化方式

预定义标准格式:ISO_LOCAL_DATE_TIME; ISO_LOCAL_DATE; ISO_LOCAL_TIME
本地化相关格式:ofLocalizedDateTime(FormatStyle.LONG)
自定义格式:ofPattern(“yyyy-MM-dd hh:mm:ss”)
一般使用自定义格式

比较器

Comparable/Comparator

  • Comparable(自然排序)
  1. String类和包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两对象大小的方式,进行从小到大排列。
  2. 重写compareTo(obj)的规则:
    如果当前对象this大于形参对象obj,返回正整数;
    如果当前对象this小于形参对象obj,返回负整数;
    如果当前对象this等于形参对象obj,返回零。
  3. 自定义类需要实现Comparable接口后,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序。
  • Comparator(定制排序)
  1. 当元素类型没实现Comparable接口又不方便修改代码,或实现了Comparable接口但排序规则不适合当前需要,此时考虑使用Comparator。
  2. 重写compare(Object o1, Object o2)方法,比较o1和o2大小。
    如果返回正整数,o1大于o2;
    如果返回负整数,o1小于o2;
    如果返回零,o1等于o2。
  • 两者对比
    Comparable接口长期有效,Comparator接口属于临时性。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值