精选文章 JAVA核心类库--3、可变字符串类和日期相关类

JAVA核心类库--3、可变字符串类和日期相关类

作者:LuckyToXS 时间: 2020-08-05 10:10:59
LuckyToXS 2020-08-05 10:10:59

1、可变字符串类

1.1、基本概念

  • 由于String类描述的字符串内容是个常量不可改变,当需要在Java代码中描述大量类似的字符串时,只能单独申请和存储,此时会造成内存空间的浪费。
  • 为了解决上述问题,可以使用java.lang.StringBuilder类和java.lang.StringBuffer类来描述字符序列可以改变的字符串,如:"ab"。
  • StringBuffer类是从jdk1.0开始存在,属于线程安全的类,因此效率比较低。
  • StringBuilder类是从jdk1.5开始存在,属于非线程安全的类,效率比较高。

1.2、StringBuilder类常用的构造方法

方法声明功能介绍
StringBuilder()使用无参方式构造对象,容量为16
StringBuilder(int capacity)根据参数指定的容量来构造对象,容量为参数指定大小
StringBuilder(String str)根据参数指定的字符串来构造对象,容量为:16+字符串长度

1.3、StringBuilder类常用的成员方法

方法声明功能介绍
int capacity()用于返回调用对象的容量
int length()用于返回字符串的长度,也就是字符的个数
StringBuilder insert(int offset, String str)插入字符串并返回调用对象的引用,就是自 己。
StringBuilder append(String str)追加字符串
StringBuilder deleteCharAt(int index)将当前字符串中下标为index位置的单个字符 删除
StringBuilder delete(int start,int end)删除字符串
StringBuilder replace(int start,int end, String str)替换字符串
StringBuilder reverse()字符串反转
setCharAt(int index, char ch)指定索引处的字符设置为 ch

replace(int start, int end, String str)

使用指定的 String的字符替换此序列的子字符串中的字符。
  • 作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。
        String str1=new String("hello");
        String str2=str1.toUpperCase();
        System.out.println(str1+","+str2); //HELLO,hello
        
        StringBuilder sb1=new StringBuilder("hello");
        StringBuilder sb2=sb1.insert(0,"abcd");
        System.out.println(sb1+","+sb2); // abcdhello,abcdhello
        //考试考点
        //考点一:既然StringBuilder类得对象本身可以修改,那么为什么成员方法还有返回值呢
        //解析:为了连续调用
        sb1.reverse().append("1").append("2").insert(0,"1");
        //考点二:如何实现StringBuilder类型合String类型之间的转换
        String str3=sb1.toString();
        StringBuilder str4=new StringBuilder(str3);
        //考点三:String,StringBuilder,StringBuffer之间效率谁高?如何排序
        //String < StringBuffer < StringBuilder

1.4、返回值的设计

  • StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return this。
  • 由此可见,这些方法在对StringBuilder所封装的字符序列进行改变后又返回了该对象的引用。基于这样设计的目的在于可以连续调用。

2、Java8中的日期相关类

2.1、Java8日期类的由来

  • JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
  • Date类中的年份是从1900开始的,而月份都从0开始。
  • 格式化只对Date类有用,对Calendar类则不能使用。
  • 非线程安全等。
        //有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,
        //可以作为比long还要大的数据类型
        long mcss=System.currentTimeMillis();
        System.out.println("距离1970年1月1日0分0秒已经过去"+mcss+"毫秒");
/**
 * @author XiceSberg
 * @date 2020/8/5 22:40
 * @description
 */
public class DateTest {
    public static void main(String[] args) throws Exception{
        //获取当前系统时间
        Date d1=new Date();
        System.out.println("d1="+d1);  //d1=Thu Aug 06 03:26:24 CST 2020

        //构造SimpleDateFormat类型的对象并指定格式
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
        //实现日期向文本类型转换
        //alt+Enter可以实现返回值的生成
        String format = sdf.format(d1);
        System.out.println(format);  //2020-26-06 03:26:24
        //实现文本类型向实际日期转换
        Date parse = sdf.parse(format); //parse会出现异常需要再main哪里加上异常抛出处理
        System.out.println(parse);   //Mon Jan 06 03:26:24 CST 2020
    }
}

2.2、Java8日期类的概述

  • Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
  • java.time包:该包日期/时间API的基础包。
  • java.time.chrono包:该包提供对不同日历系统的访问。
  • java.time.format包:该包能够格式化和解析日期时间对象。
  • java.time.temporal包:该包包含底层框架和扩展特性。
  • java.time.zone包:该包支持不同时区以及相关规则的类。

2.3、LocalDate类的概述

  • java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息。
方法声明功能介绍
static LocalDate now()在默认时区中从系统时钟获取当前日期

 

2.4、LocalTime类的概述

  • java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒。
方法声明功能介绍
static LocalTime now()从默认时区的系统时间中获取当前时间
static LocalTime now(ZoneId zone)获取指定时区的当前时间

 

2.5、LocalDateTime类的概述

  • java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,如2007-12- 03T10:15:30。

                          JAVA核心类库--3、可变字符串类和日期相关类1

/**
 * @author XiceSberg
 * @date 2020/8/9 15:11
 * @description
 */
public class LocalDateTest {
    public static void main(String[] args) {
        LocalDate now = LocalDate.now();
        System.out.println("获取到的当前日期是:"+now); //获取到的当前日期是:2020-08-09
        LocalTime now1 = LocalTime.now();
        System.out.println("获取到的当前时间是:"+now1); //获取到的当前时间是:15:13:12.690550
        LocalDateTime now2 = LocalDateTime.now();
        System.out.println("获取到的当前日期时间是:"+now2); //获取到的当前日期时间是:2020-08-09T15:13:12.691270400

    }
}
        LocalDateTime of = LocalDateTime.of(2008, 8, 8, 8, 8, 8);
        System.out.println("当前设置的时间是:"+of); //当前设置的时间是:2008-08-08T08:08:08
        System.out.println(of.getYear()); //2008
        System.out.println(of.getMonthValue());//8
        System.out.println(of.getDayOfMonth());//8
        System.out.println(of.getHour());//8
        System.out.println(of.getMinute());//8
        System.out.println(of.getSecond());//8
        LocalDateTime localDateTime = of.withYear(2012);
        System.out.println(localDateTime);  //2012-08-08T08:08:08
        System.out.println(of);  //2008-08-08T08:08:08

        LocalDateTime localDateTime1 = localDateTime.plusDays(2);
        System.out.println(localDateTime1);  //2012-08-10T08:08:08
        System.out.println(localDateTime);   //2012-08-08T08:08:08

        LocalDateTime localDateTime2 = localDateTime1.minusMinutes(10);
        System.out.println(localDateTime2); //2012-08-10T07:58:08
        System.out.println(localDateTime1); //2012-08-10T08:08:08

2.6、Instant类的概述

  • java.time.Instant类主要用于描述瞬间的时间点信息。

                        JAVA核心类库--3、可变字符串类和日期相关类2

2.7、DateTimeFormatter类的概述

  • java.time.format.DateTimeFormatter类主要用于格式化和解析日期。

                        JAVA核心类库--3、可变字符串类和日期相关类3

        //按照指定格式准备一个DateTimeFormatter类型得对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-mm-dd hh:mm:ss");
        //获取当前系统时间
        LocalDateTime now3 = LocalDateTime.now();
        //实现日期格式得向字符串类型转换
        String format = dateTimeFormatter.format(now3);
        System.out.println(format); //2020-06-10 06:06:45
        //实现字符串类型得向日期格式得转换
        TemporalAccessor parse = dateTimeFormatter.parse(format);
        //{HourOfAmPm=6, MinuteOfHour=6, Year=2020, MilliOfSecond=0, DayOfMonth=10, SecondOfMinute=45, MicroOfSecond=0, NanoOfSecond=0},ISO
        System.out.println(parse); 

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Python大方向的学习路线

下一篇:可信任的多方计算和验证仿真:一种扩展区块链的方法

您可能感兴趣

  • Linux系统内存

    Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,Linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。 从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。 一、走进Linux 内存 1、内存是什么? 1)内存又称主存...

  • 阿里面试,208道Java高频题首发,拿下高薪offer不是梦

    Java 基础 1. JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么? 3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗? 4. final 在 Java 中有什么作用? 5. Java 中的 Math. round(-1. 5) 等于多少? 6. String 属于基础的数据类型吗? 7. Java 中操作字符串都有...

  • WKA去中心化交易,重构区块链价值网络

    随着互联网技术的不断成熟与发展,越来越多的人选择线上交易。通证化是公司体制的变革,是未来各类机构的重要组织形态和机会,是可以将公司用户与公司权益的分配主体真正统一起来的经济模式。于是,数字资产安全与快捷的优势则日益凸显。 正如区块链的本质是“去中心化”。随着区块链技术的发展和场景应用的日益普及,未来区块链将会颠覆整个社会的运作模式、生产模式甚至公司治理模式。于是WKA去中心化交易所应运而生,...

  • 学计算机必看:程序员部落酋长,给计算机专业学生的 6 个建议!

    如果你喜欢编程,那么你真是受到了上天的眷顾。你是非常幸运的少数人之一,能够以自己喜欢的事谋生。大多数人没有这么幸运。你认为理所当然的观念“热爱你的工作”,其实是一个很现代的概念。通常的看法是,工作是一种让人很不开心的事,你为了拿工资才不得不去上班。 你工作的目的是为了攒下钱去干那些自己真正喜欢干的事,但是前提是你得等到65岁退休之后才行,而且还有不少条件。条件一,你的积蓄必须足够多;条件二,...

  • 210道面试官必问经典面试题总结分享|Java+JVM+数据库+算法+Spring+中间件+设计模式超详细整理

    “金九银十”的秋招热潮已经来了,由于疫情影响、今年的秋招来的格外早。小编从今天六月份开始备战,不负众望的成功拿下了一些大厂的offer。经过这么多次的面试,凭借自己的面试成功经验和这两个月的准备,小编整理了一份面试清单分享给大家,希望能给和我一样为了秋招奋战多时的码农亲人们一点帮助(java方向),觉得有帮助的同学可以转发点个赞哦~~祝大家面试顺利,一举拿下大厂offer! 一、JAVA基础...

  • Kubernetes之yaml文件详解(汇总-详细)

    一、YAML基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tal键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 "#" 表示注释,从这个字符一直到行尾,都会被解析器忽略 在Kubernetes中,只需要知道两种结构类型即可: ...

  • 【Python基础】如何编写简洁美观的Python代码

    作者 | ANIRUDDHA BHANDARI 编译 | VK 来源 | Analytics Vidhya 概述 Python风格教程将使你能够编写整洁漂亮的Python代码 在这个风格教程中学习不同的Python约定和Python编程的其他细微差别 介绍 你有没有遇到过一段写得很糟糕的Python代码?我知道你们很多人都会点头的。 编写代码是数据科学家或分析师角色的一部分。另一方面,编写漂...

  • 计算机必备专用英语词汇

    非常好的单词整理,转载一下当作笔记 1.单词说明:   command n. 命令,指令 [kə'mɑ:nd]   单词拼写 名词 单词含义 音标(发音)   提示:着重记忆单词对应的意思,有能力最好词性也记忆。 2.词性说明: n v vi vt conj prep pron adj adv 名词 动词 非及物动词 及物动词 连词 介词 代词 形容词 副词 3.单词列表: 1.file,n...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。