文章目录
- 字符串相关的类
- String的特性
- String对象的创建
- 字符串相关的类
- String类与其他结构之间的转换
- StringBuffer,StringBuilder
- StringBuffer类的常用方法
- JDK8之前日期时间API
- java.lang.System类
- java.util.Date类
- java.text.SimpleDateFormat类
- java.util.Calendar类
- JDK8中新日期时间API
- 新时间日期API
- LocalDate、LocalTime、LocalDateTime
- 常用方法
- Instant
- 格式化与解析日期或时间
- Java比较器
- 自然排序:java.lang.Comparable
字符串相关的类
String的特性
-
String:字符串,使用一对""引用起来表示
-
String声明为final的,不可被继承
-
String实现了Serializable接口:表示字符串是支持序列化的
实现了Comparable接口:表示String可以比较大小 -
String内部定义了final char[] value用于存储字符串数据
-
String代表不可变的字符序列.简称:不可变性.
体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值2.当对现有的字符串进行连续操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值
-
通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池中.
-
字符串常量池是不会存储相同内容的字符串的
String对象的创建
- 方式一:通过字面量定义的方式:此时的s1和s2的数据javaEE声明方法区中的字符串常量池中
String s1="javaEE";
String s2="javaEE";
- 方式二:通过new+构造器的方式:
String s3=new String("javaEE");
String s4=new String("javaEE");
字符串相关的类
-
int length():返回字符串的长度
-
char charAt(int index): 返回某索引处的字符
-
boolean isEmpty():判断是否是空字符串
-
String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
-
String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
-
String trim():返回字符串的副本,忽略前导空白和尾部空白
-
boolean equals(Object obj):比较字符串的内容是否相同
-
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
-
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
-
int compareTo(String anotherString):比较两个字符串的大小
-
String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
-
String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串
-
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
-
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
-
boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true
-
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
-
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
String类与其他结构之间的转换
- String 与基本数据类型,包装类之间的转换.
@Testpublic void test1(){String str1="123";int num=Integer.parseInt(str1);String str2=String.valueOf(num);//123System.out.println(str2);String str3=num+"";System.out.println(str1==str3);}
- String 与char[]之间的转换
@Testpublic void test2(){String str1="abc123";char[] charArray=str1.toCharArray();for(int i=0;i<charArray.length;i++){System.out.println(charArray[i]);}char[] arr=new char[]{'h','e','l','l','o'};String str2=new String(arr);System.out.println(str2);}
- String 与byte[]之间的转换
@Testpublic void test3() throws UnsupportedEncodingException {String str1="abc123中国";byte[] bytes=str1.getBytes();//使用默认的字符集,进行转换System.out.println(Arrays.toString(bytes));byte[] gbks=str1.getBytes("gbk");System.out.println(Arrays.toString(gbks));String str2=new String(bytes);//使用默认的字符集进行解码System.out.println(str2);String str3=new String(gbks);System.out.println(str3);//出现乱码.原因:编码集和解码集不一致String str4=new String(gbks,"gbk");System.out.println(str4);}
StringBuffer,StringBuilder
-
java.lang.StringBuffer代表可变的字符序列,JDK1.0中声明,可以对字符串内容进行增删,此时不会产生新的对象。
-
很多方法与String相同。
-
作为参数传递时,方法内部可以改变值。
-
StringBuffer类不同于String,其对象必须使用构造器生成。有三个构造器
- StringBuffer():初始容量为16的字符串缓冲区
- StringBuffer(int size):构造指定容量的字符串缓冲区
- StringBuffer(String str):将内容初始化为指定字符串内容
-
String,StringBuffer,StringBuilder三者异同
String:不可变的字符序列:底层使用char[]存储
StringBuffer:可变的字符序列:线程安全的,效率低:底层使用char[]存储
StringBuilder:可变的字符序列:JDK5.0新增的,线程不安全的,效率高:底层使用char[]存储
StringBuffer类的常用方法
- StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
- StringBuffer delete(int start,int end):删除指定位置的内容
- StringBuffer replace(int start, int end, Stringstr):把[start,end)位置替换为str
- StringBuffer insert(int offset, xxx):在指定位置插入xxx
- StringBuffer reverse() :把当前字符序列逆转
- public int indexOf(String str)
- public String substring(int start,intend):返回一个从start开始到end索引结束的左闭右开区间的子字符串
- public int length()
- public char charAt(int n )
- public void setCharAt(int n ,char ch)
总结:
增: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):在指定位置插入xxx
长度:length()
遍历:for +charAT()
JDK8之前日期时间API
java.lang.System类
- System类提供的public staticlongcurrentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
- 此方法适于计算时间差。
- 计算世界时间的主要标准有:
UTC(Coordinated Universal Time)
GMT(Greenwich Mean Time)
CST(Central Standard Time)
java.util.Date类
- 表示特定的瞬间,精确到毫秒
- 构造器
- Date():使用无参构造器创建的对象可以获取本地当前时间。
- Date(long date)
- 常用方法
- getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- toString():把此 Date 对象转换为以下形式的 String: dow mon ddhh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
java.text.SimpleDateFormat类
- Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
- 它允许进行格式化:日期->文本、解析:文本->日期
- 格式化:
- SimpleDateFormat() :默认的模式和语言环境创建对象
- public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用
- public String format(Date date):方法格式化时间对象date
- 解析
- public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
@Testpublic void test() throws ParseException {//实例化SimpleDateFarmatSimpleDateFormat sdf = new SimpleDateFormat();//实例化:日期--->字符串Date date=new Date();String format=sdf.format(date);System.out.println(format);//解析:格式化的逆过程,字符串--->日期String str="2025/7/16 18:07";sdf.parse(str);Date date1=sdf.parse(str);System.out.println(date1);System.out.println();SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化String format1=sdf.format(date);System.out.println(format1);//解析Date date2=sdf.parse("2025/7/16 18:10");System.out.println(date2);}
java.util.Calendar类
- Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
- 获取Calendar实例的方法
- 使用**Calendar.getInstance()**方法
- 调用它的子类GregorianCalendar的构造器。
- 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
- public void set(int field,int value)
- public void add(int field,int amount)
- public final Date getTime()
- public final void setTime(Date date)
JDK8中新日期时间API
新时间日期API
- java.time – 包含值对象的基础包
- java.time.chrono – 提供对不同的日历系统的访问
- java.time.format – 格式化和解析时间和日期
- java.time.temporal – 包括底层框架和扩展特性
- java.time.zone – 包含时区支持的类
LocalDate、LocalTime、LocalDateTime
- LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例是不可变的对象
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期
- LocalTime表示一个时间,而不是日期
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一
常用方法
- noew():获取当前的日期,时间,日期+时间
- of():设置指定的年,月,日,时,分,秒,没有偏移量
- getXxx():获取相关的属性
- withXxx():设置相关的属性
- plus:向当前对象添加几天、几周、几个月、几年、几小时
- minus:从当前对象减去几月、几周、几天、几年、几小时
Instant
- Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。
格式化与解析日期或时间
- java.time.format.DateTimeFormatter 类:该类提供了三种格式化方法
- 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
Java比较器
自然排序:java.lang.Comparable
- 像String,包装类等实现类Comparable接口,重写了Comparable()方法给出了比较两个对象大小
- 像String,包装类重写了compareTo()方法以后,进行了从小到大的排序
- 重写了compareTo()的规则:
- 如果当前的对象this大于形参对象obj,则返回正整数.
- 如果当前的对象this小于形参对象obj,则返回负整数.
- 如果当前的对象this等于形参对象obj,则返回零.
- 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重compareTo(obj)方法,在comparableTo(obj)方法中指定如何排序