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

  1. java.lang.System类
  2. java.util.Date类
  3. java.text.SimpleDateFormat类
  4. 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总结最全相关推荐

  1. (Java常用类)日期时间类

    文章目录 Date类 概述 常用方法 代码演示 DateFormat类 构造方法 格式规则 常用方法 代码演示 Calendar类 概念 获取方式 常用方法 get/set方法 add方法 getTi ...

  2. JAVA常用类之日期处理

    在应用程序设计中,我们经常会用到日期时间,比如出生日期之类的,JAVA中为我们提供了一些处理日期的类.这一片博客将为大家介绍一下. java.util.Date Date类是我们用的比较多的一个处理时 ...

  3. java常用类-----String类的源码分析、可变和不可变序列

    package cn.zxg.PackgeUse; /** * 测试StringBuilder,StringBuffer可变字符序列 */ public class TestStringBuilder ...

  4. java 字符串 面试题_Java常用类String的面试题汇总(java面试题)

    1.比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串 ...

  5. 返回值 包装类_(九)Java常用类

    (九)Java常用类 String类 概述 /*String:字符串,使用一对""来表示. * 1.String声明为final,不能被继承. * 2.String实现了Seria ...

  6. <十>java常用类(2)

    Java常用类-String类(二) String的常用方法1 一.方法概述 int length():返回字符串的长度 char charAt(int index):返回某索引处的字符 boolea ...

  7. java常用类(Object、String、Math、Date)

    文章目录 java常用类(Object.String.Math.Date) 一.object类及其方法 1. getClass()方法 2. hashCode()方法 3. toString方法 4. ...

  8. 3.4 java基础总结①常用类String②Stringbuffer③Stringbuilder

    ①常用类String②正则表达式③Stringbuffer④Stringbuilder 一.String ①String内存分析 String str0 = "hello";预先放 ...

  9. Java笔记-常用类String

    常用类String 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. String 创建的字符串存储在公共池中. import java.util.Arrays; ...

  10. java 类 函数,java常用类和函数

    JAVA中常用类的常用方法_计算机软件及应用_IT/计算机_专业资料.. JAVA 中常用类的常用方法 一. java.lang.Object 类 1. clone ()方法 创建并返回此对象的... ...

最新文章

  1. android 之开关控件的使用
  2. js 格式化日期 (/Date(1400046388387)/)
  3. AngularJS操作DOM——angular.element
  4. poj 3026 Borg Maze (最小生成树+bfs)
  5. 【机器学习】无监督学习--(降维)主成分分析PCA
  6. oracle多少钱一套_消防水炮多少钱一套?您真的只需要一套吗
  7. 云计算99.9%可用性毫无意义 灾难恢复是关键
  8. (继承及其访问限定符)(派生类及其默认成员函数)(赋值兼容规则)
  9. Python语言程序设计(嵩天老师版)第二周代码解析
  10. 利用色彩范围和钢笔工具抠图
  11. 十进制和二进制之间的转换
  12. 2022年疑点事件:NMN到底是什么?nmn到底有没有用?
  13. “阴魂不散”的新冠:最新研究发现98种长期的新冠病毒后遗症
  14. linux中dd命令详解,Linux基础知识之dd命令详解
  15. RabbitMQ-全面详解(学习总结---从入门到深化)
  16. 错误:The Operation Couldn't be Completed
  17. Java 8 Lambda表达式官方入门教程(包括Lambda表达式介绍和语法)
  18. Ubuntu树莓派的putty、ftp、Xming、VNC远程连接操作教程
  19. Java:1018: 奇数偶数
  20. 计算机二进制转化教案及ppt,二进制运算及转换(课件).ppt

热门文章

  1. Eclipse无Tomcat 9.0(安装JST Server Adapters Extensions插件后仍不能添加Tomcat 9.0的一种解决办法)
  2. Spherical Harmonics(球谐函数)与PRT
  3. 移动终端应用开发基础---便签App
  4. python飞机大战游戏——适合收藏
  5. 专门利用计算机搞破坏的人称为,在计算机网络中,专门利用计算机搞破坏或恶作剧的人被称为(...
  6. 来了解一下香港公司的离岸豁免-跨境知道
  7. 以前VCD感觉很清晰,为什么现在有些视频用电脑看感觉画面惨不忍睹?
  8. 单点登录:HTTPS相关知识
  9. 云服务器买来之后必做的几件事——你做了吗!【❤️建议收藏❤️】
  10. 拼多多创始人黄峥:我的创业人生与人生理解