Java常用类:string 、日期api总结最全
String
String字符串,使用""引用来表示
- 1、String声明为final,不可 被继承
- 2、实现了Serializable接口,表示字符串是支持序列化的
- 3、实现了Comparable接口,表示可以比较大小
- 4、内部定义了final char value[],用于存储字符串数据
- 5、String:代表不可变的字符序列。简称不可变性
当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
当对现有的字符串进行连接操作时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值
当调用String的replace()方法修改指定字符或字符串时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值
- 6、通过字面量方式给一个字符串赋值,此时的字符串值声明在字符串常量池中
- 7、字符串常量池不会存储相同内容的字符串的。
package com.linfeng.java;import org.junit.Test;public class StringTest {/*
* String字符串,使用""引用来表示
* 1、String声明为final,不可 被继承
* 2、实现了Serializable接口,表示字符串是支持序列化的
* 3、实现了Comparable接口,表示可以比较大小
* 4、内部定义了final char value[],用于存储字符串数据
* 5、String:代表不可变的字符序列。简称不可变性
* 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
* 当对现有的字符串进行连接操作时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值
* 当调用String的replace()方法修改指定字符或字符串时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值
* 6、通过字面量方式给一个字符串赋值,此时的字符串值声明在字符串常量池中
* 7、字符串常量池不会存储相同内容的字符串的。
* */@Testpublic 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 = "hel";s3 += "lo";System.out.println(s3);//helloSystem.out.println("*************");String s4 = "abc";String s5 = s4.replace('a', 'm');System.out.println(s4);//abcSystem.out.println(s5);//mbc}
}
面试题:String s=new String(“abc”)方式创建对象,在内存中创建了几个对象?
两个,一个是堆空间中new的结构,另一个是char[]对应常量池中的数据“abc”
String s1="leet";
String s2="Code";String s3="leetCode";
String s4="leet"+"Code";
String s5=s1+"Code";
String s6="leet"+s2;
String s7=s1+s2;String s8=s5.intern();//返回值得到的s8使用的是常量池中的字符串s3==s4;//true,都是在常量池中
s3==s5;//false,只要有变量参与,都在堆中
s3==s6;//false
s3==s7;//false
结论:
- 常量与常量的拼接结果在常量池,且常量池中不会存在相同容量的常量
- 只要其中有一个是变量,结果就在堆中
- 如果拼接的结果调用intern(方法),返回值就在常量池中
String中的方法
int length();//返回字符串长度
char charAt(int index);//返回某索引处的字符
boolean isEmpty();//判断是否为空字符串
String toLowerCase();//转小写
String toUpperCase();//转大写,字符串本身不变,需要新建字符串接收
String trim();//去除首尾空格
boolean equals();
boolean equalsIgnoreCase();//和equals类似,忽略大小写
int CompareTo();//比较两个字符串的大小,负数则当前字符串小
String subString(int beginIndex);//返回一个新的字符串,他是此字符串的从beginIndex开始截取到最后的一个子字符串
String subString(int beginIndex,int endIndex);//返回一个新的字符串,他是此字符串的从beginIndex开始截取endIndex(不包含)的一个子字符串
boolean endsWith();//是否以指定的字符串结束
boolean startsWith(String prefix,int toffset);//指定索引位置开始的子字符串是否以指定前缀开始
String concat(String str)//将指定字符串连接到此字符串结尾。等价于+public boolean startsWith(String prefix):判断当前字符串是否以prefix开始。
public boolean endsWith(String suffix):判断当前字符串是否以suffix结束。
String与基本数据类型、包装类的转换
String—>基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)
package com.linfeng.java;import org.junit.Test;public class test2 {@Testpublic void test(){String s1 = "123";//Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换为整型。int i = Integer.parseInt(s1);System.out.println(i);//类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应//的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型byte b = Byte.parseByte(s1);System.out.println(b);}
}
@Testpublic void test2(){int i = 1234;String s = String.valueOf(i);System.out.println(s);}
String与字符数组转换
@Test//String与char[]之间转换// String ---->char[]:调用String的toCharArray()//char-------->String:调用String的构造器public void t1(){String str1 = "abc123";char[] chars = str1.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println(chars[i]);}char[] arr = new char[]{'h','e','l','l','o'};String str2 = new String(arr);System.out.println(str2);}
String与字节数组转换
package com.linfeng.java;import org.junit.Test;import java.io.UnsupportedEncodingException;import java.util.Arrays;public class test2 {@Testpublic void test(){String s1 = "123";//Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换为整型。int i = Integer.parseInt(s1);System.out.println(i);//类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应//的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型byte b = Byte.parseByte(s1);System.out.println(b);}@Testpublic void test2(){int i = 1234;String s = String.valueOf(i);System.out.println(s);}@Test//String与char[]之间转换// String ---->char[]:调用String的toCharArray()//char-------->String:调用String的构造器public void t1(){String str1 = "abc123";char[] chars = str1.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println(chars[i]);}char[] arr = new char[]{'h','e','l','l','o'};String str2 = new String(arr);System.out.println(str2);}@Testpublic void t2() throws UnsupportedEncodingException {// String s1="abc123";String s2 = "abc中国";//String------>byte[]:调用Spring的getBytes()byte[] bytes = s2.getBytes();//使用默认字符集转换System.out.println(Arrays.toString(bytes));//[97, 98, 99, 49, 50, 51]byte[] gbks = s2.getBytes("gbk");//使用jdk字符集编码System.out.println(Arrays.toString(gbks));//[97, 98, 99, 49, 50, 51]System.out.println("*************************");//byte[]----->String:调用String的构造器String s = new String(bytes);//使用默认的字符集解码System.out.println(s);String s3 = new String(gbks);System.out.println(s3);//出现乱码String s4 = new String(gbks, "gbk");//使用指定的gbk进行编码System.out.println(s4);//无乱码}
}
字符串相关的类:StringBuffer与StringBuilder
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且
提供相关功能的方法也一样
面试题:对比String、StringBuffer、StringBuilder
- String(JDK1.0):不可变字符序列
- StringBuffer(JDK1.0):可变字符序列、效率低、线程安全
- StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全
注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder
会改变其值。
StringBuffer类的常用方法:
练习:
@Testpublic void t3(){String a = "123";String b = "123";String c = new String("123");String d = new String("123");System.out.println(a.equals(b));//trueSystem.out.println(a==b);//tSystem.out.println(c.equals(d));//tSystem.out.println(c==d);//fSystem.out.println(a.equals(c));//tSystem.out.println(a==c);//f}
JDK8之前日期时间API
- java.lang.System类
- java.util.Date类
- java.text.SimpleDateFormat类
- java.util.Calendar(日历)类
@Testpublic void t1(){//1、system类中的currentTimeMillislong l = System.currentTimeMillis();//称为时间戳System.out.println(l);//来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。}
@Testpublic void t2(){//构造器1;Date():创建一个对应当前时间的Date对象Date date = new Date();System.out.println(date.toString());//Wed May 04 14:11:47 CST 2022System.out.println(date.getTime());//1651644707060//构造器2:创建指定时间戳的date对象Date date1 = new Date(6516447070601L);System.out.println(date1.toString());//java.sql.date对应着数据库中的日期类型的变量//创建java.sql.date对象java.sql.Date date2 = new java.sql.Date(6516447070601L);System.out.println(date2);//2176-07-01//如何将util.Date转化为sql.DateDate date3 = new Date();// java.sql.Date date4 = (java.sql.Date) date3;//报错java.sql.Date date4 = new java.sql.Date(date3.getTime()); }
@Testpublic void t1() throws ParseException {/*SimpleDateFormat()两个操作1、格式化:日期----->字符串2、解析:字符串----->日期*/SimpleDateFormat s1 = new SimpleDateFormat();//实例化//1、格式化Date date = new Date();System.out.println(date.toString());//Wed May 04 14:37:02 CST 2022String s = s1.format(date);System.out.println(s);//22-5-4 下午2:37//2、解析String s2 = "22-3-4 下午2:37";//注意格式Date parse = s1.parse(s2);System.out.println(parse);//Fri Mar 04 14:37:00 CST 2022System.out.println("*******************");Date date1 = new Date();SimpleDateFormat st = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String s3 = st.format(date1);System.out.println(s3);//2022-05-04 02:53:19}
@Testpublic void t3(){//Calendar是一个抽象基类//实例化
// 方式1:调用它的子类GregorianCalendar的构造器
//方式2:使用Calendar.getInstance()方法Calendar instance = Calendar.getInstance();//get()Date date = new Date();int i = instance.get(DAY_OF_MONTH);System.out.println(i);//4System.out.println(instance.get(Calendar.DAY_OF_YEAR));//124//set()instance.set(DAY_OF_MONTH,22);int i1 = instance.get(DAY_OF_MONTH);System.out.println(i1);//22//addinstance.add(DAY_OF_MONTH,2);int i2 = instance.get(DAY_OF_MONTH);System.out.println(i2);//24// gettime() 日历类---->DateDate date1 = instance.getTime();System.out.println(date1);//Tue May 24 16:51:38 CST 2022//settime() Date---->日历类Date date2 = new Date();instance.setTime(date2);int i3 = instance.get(DAY_OF_MONTH);System.out.println(i3);//4}
JDK8中新日期时间API
LocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例
是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区
相关的信息。
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
- LocalTime表示一个时间,而不是日期。
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
注:ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示
法,也就是公历。
package com.linfeng.java;import org.junit.Test;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class TimeNow {@Testpublic void t1(){//实例化1、now():获取当前日期、时间、日期+时间LocalDate now = LocalDate.now();LocalTime now1 = LocalTime.now();LocalDateTime now2 = LocalDateTime.now();System.out.println(now);//2022-05-04System.out.println(now1);//19:49:34.361System.out.println(now2);//2022-05-04T19:49:34.361//实例化2、of():设置指定日期,没有偏移量LocalDate date = LocalDate.of(2022, 5, 4);System.out.println(date);//2022-05-04System.out.println("************************************");//getXxx()System.out.println(now2.getDayOfMonth());//当月第四天System.out.println(now2.getDayOfWeek());//星期三System.out.println(now2.getMonth());//5月System.out.println(now2.getMonthValue());//5System.out.println(now2.getMinute());//第56分钟System.out.println("**************************");//local体现不可变性//withXxx:设置相关的属性LocalDateTime time = now2.withDayOfMonth(22);System.out.println(now2);//2022-05-04T20:01:22.272System.out.println(time);//2022-05-22T20:01:22.272System.out.println("**************");//增加LocalDateTime months = now2.plusMonths(3);System.out.println(now2);//2022-05-04T20:07:12.312System.out.println(months);//2022-08-04T20:07:12.312System.out.println("**************");//减LocalDateTime d1 = now2.minusDays(3);System.out.println(now2);//2022-05-04T20:07:12.312System.out.println(d1);//2022-05-01T20:08:59.339}
}
package com.linfeng.java;import org.junit.Test;import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;public class TimeNow2 {@Testpublic void t2(){//实例化1Instant now = Instant.now();System.out.println(now);//2022-05-04T12:39:35.926Z,按照本初子午线的时间//实例化2OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));System.out.println(offsetDateTime);//2022-05-04T22:45:25.977+08:00//获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数。long l = now.toEpochMilli();System.out.println(l);//1651675728284//给定毫秒数,获取instant实例Instant instant = now.ofEpochMilli(1651675728284L);System.out.println(instant);//2022-05-04T14:48:48.284Z}
}
@Testpublic void t4(){//预定义的标准格式。如://ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIMEDateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//格式化:日期----->字符串LocalDateTime localDateTime = LocalDateTime.now();String str = formatter.format(localDateTime);System.out.println(localDateTime);//2022-05-05T10:11:55.606System.out.println(str);//2022-05-05T10:11:55.606//解析TemporalAccessor parse = formatter.parse("2022-05-05T10:11:55.606");System.out.println(parse);//{},ISO resolved to 2022-05-05T10:11:55.606//本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)//FormatStyle.LONG FormatStyle.MEDIUM FormatStyle.SHORT 适用于localDatetimeDateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);//格式化String str2 = formatter1.format(localDateTime);System.out.println(str2);//22-5-5 上午10:21//自定义方式 如:ofPattern(“yyyy-MM-dd hh:mm:ss”)DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//格式化String s = formatter2.format(localDateTime);System.out.println(s);//2022-05-05 10:26:25//解析TemporalAccessor parse1 = formatter2.parse("2022-05-05 10:26:25");System.out.println(parse1);//{MilliOfSecond=0, MinuteOfHour=26, HourOfAmPm=10, SecondOfMinute=25, NanoOfSecond=0, MicroOfSecond=0},ISO resolved to 2022-05-05}
Java常用类:string 、日期api总结最全相关推荐
- (Java常用类)日期时间类
文章目录 Date类 概述 常用方法 代码演示 DateFormat类 构造方法 格式规则 常用方法 代码演示 Calendar类 概念 获取方式 常用方法 get/set方法 add方法 getTi ...
- JAVA常用类之日期处理
在应用程序设计中,我们经常会用到日期时间,比如出生日期之类的,JAVA中为我们提供了一些处理日期的类.这一片博客将为大家介绍一下. java.util.Date Date类是我们用的比较多的一个处理时 ...
- java常用类-----String类的源码分析、可变和不可变序列
package cn.zxg.PackgeUse; /** * 测试StringBuilder,StringBuffer可变字符序列 */ public class TestStringBuilder ...
- java 字符串 面试题_Java常用类String的面试题汇总(java面试题)
1.比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串 ...
- 返回值 包装类_(九)Java常用类
(九)Java常用类 String类 概述 /*String:字符串,使用一对""来表示. * 1.String声明为final,不能被继承. * 2.String实现了Seria ...
- <十>java常用类(2)
Java常用类-String类(二) String的常用方法1 一.方法概述 int length():返回字符串的长度 char charAt(int index):返回某索引处的字符 boolea ...
- java常用类(Object、String、Math、Date)
文章目录 java常用类(Object.String.Math.Date) 一.object类及其方法 1. getClass()方法 2. hashCode()方法 3. toString方法 4. ...
- 3.4 java基础总结①常用类String②Stringbuffer③Stringbuilder
①常用类String②正则表达式③Stringbuffer④Stringbuilder 一.String ①String内存分析 String str0 = "hello";预先放 ...
- Java笔记-常用类String
常用类String 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. String 创建的字符串存储在公共池中. import java.util.Arrays; ...
- java 类 函数,java常用类和函数
JAVA中常用类的常用方法_计算机软件及应用_IT/计算机_专业资料.. JAVA 中常用类的常用方法 一. java.lang.Object 类 1. clone ()方法 创建并返回此对象的... ...
最新文章
- android 之开关控件的使用
- js 格式化日期 (/Date(1400046388387)/)
- AngularJS操作DOM——angular.element
- poj 3026 Borg Maze (最小生成树+bfs)
- 【机器学习】无监督学习--(降维)主成分分析PCA
- oracle多少钱一套_消防水炮多少钱一套?您真的只需要一套吗
- 云计算99.9%可用性毫无意义 灾难恢复是关键
- (继承及其访问限定符)(派生类及其默认成员函数)(赋值兼容规则)
- Python语言程序设计(嵩天老师版)第二周代码解析
- 利用色彩范围和钢笔工具抠图
- 十进制和二进制之间的转换
- 2022年疑点事件:NMN到底是什么?nmn到底有没有用?
- “阴魂不散”的新冠:最新研究发现98种长期的新冠病毒后遗症
- linux中dd命令详解,Linux基础知识之dd命令详解
- RabbitMQ-全面详解(学习总结---从入门到深化)
- 错误:The Operation Couldn't be Completed
- Java 8 Lambda表达式官方入门教程(包括Lambda表达式介绍和语法)
- Ubuntu树莓派的putty、ftp、Xming、VNC远程连接操作教程
- Java:1018: 奇数偶数
- 计算机二进制转化教案及ppt,二进制运算及转换(课件).ppt
热门文章
- Eclipse无Tomcat 9.0(安装JST Server Adapters Extensions插件后仍不能添加Tomcat 9.0的一种解决办法)
- Spherical Harmonics(球谐函数)与PRT
- 移动终端应用开发基础---便签App
- python飞机大战游戏——适合收藏
- 专门利用计算机搞破坏的人称为,在计算机网络中,专门利用计算机搞破坏或恶作剧的人被称为(...
- 来了解一下香港公司的离岸豁免-跨境知道
- 以前VCD感觉很清晰,为什么现在有些视频用电脑看感觉画面惨不忍睹?
- 单点登录:HTTPS相关知识
- 云服务器买来之后必做的几件事——你做了吗!【❤️建议收藏❤️】
- 拼多多创始人黄峥:我的创业人生与人生理解