JAVA常用类第五天

需要会的内容

  • avaAPI文档的使用
  • String 类
  • Date日期类以及格式化类
  • String字符串的特性
  • StringBuffer的使用
  • String和StringBuffer的常用方法

一、String类

基本数据类型 :不属于Object类型的继承体系之下
引用数据类型 :属于对象类型 Object类型的继承体系之下。

String 字符串是引用数据类型 Object类型
在这里插入图片描述

1、什么是string
字符串、引用类型、字符串对象
2.String的特性
字符串不可变
每一个字符串都是String类的实例对象//
正是因为字符串是不可变的,所以字符串是共享的。
字符串的效果上相当于一个char[] 数组,但是它的底层原理是byte[] 字节数组。

String str=“值”------使用方法跟基本数据类型一样,先看常量里面是否有这个值如果有就直接指向, 如果没有就开辟空间存储
String str=new String(); 最少开辟两个内存空间,有可能是三个,堆区都会开辟空间 还有栈区 ,常量池中得看以前有没有。

特性:String字符串是不可变,每一次得=赋值都是地址得重新开辟

3、创建字符串

3.1、 直接 String str=“abc”;

注意字符串是需要双引号的 字符串对象 。虽然没有new

3.2、通过构造方法

String str = new String(“abc”);

4、字符串的常用方法
String()
初始化新创建的String对象,使其表示空字符序列。

String(String orignal)
初始化新创建的string对象,使其表示参与相同的字符序列,, 就是新创建的字符串是参数字符串的福本

charAt(int index)
返回指定char指引的值。

concat(String str)
将指定的字符串连接到字符串的末尾。

Contains(CharSequence s)
当且当此字符串包含指定的char值序列时才返回true。

endsWith(String suffix)
测试字符串是否以指定的对象进行比较。

equalsIgnore(String anotherString)
将此String与其他string比较, 忽略案例注意事项

getBytes()
使用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中

等等等

实例

//返回指定索引的字符串   关键字charAt
   String str1="abcd bce df bcgh";
       char c=str1.charAt(2);//c
        System.out.println(c);
//将指定的字符串str2追加到str1结尾   关键字 concat
    String str1="abcd bce df bcgh";
    String str2="123";
        String ab=str1.concat(str2);
        System.out.println(ab);//abcd bce df bcgh123

 //返回字符串中是否包含指定的char字符串 关键字contains
   String str1="abcd bce df bcgh";
        boolean a=str1.contains("1");
        System.out.println(a);//false
  //判断字符串是以指定字符串结尾 endsWith
        String str1="abcd bce df bcgh";
        String str2="123";
        boolean a=str1.endsWith("h");
        System.out.println(a);//true
 //join 拼接字符串 将指定字符串拍拼接到一起 关键字join
        String str1="abcd bce df bcgh";
        String str2="123";
        String str3=".....";
        String b=String.join("*",str1,str2,str3);
        System.out.println(b);//abcd bce df bcgh*123*.....
//用新字符串将所有的老字符串替换 关键字 replace
String str1="abcd bce df bcgh";
String a=str1.replace("df","34");
System.out.println(a);//abcd bce 34 bcgh

5.字符串中的比较方法
在这里插入图片描述
在这里插入图片描述
小结:栈存引用(基本数据类型),只要new了 就在堆中。常量保存在常量池中。

​ String str1 = “abc”; 先去常量池中找”abc“ 是否存在,如果存在直接引用,不存在,就创建。

​ String str2 = “abc”;先去常量池中找”abc“ 是否存在,如果存在直接引用,不存在,就创建。

== :用法

​ 1. 如果是基本数据类型:== 比较值。

​ 2. 如果是引用数据类型:== 比较引用的地址。

equals(): 注意
如果想比较(String)引用数据类型的值,可以通过两个方法比较

   //字符串比较方法equals()         方法   比较字符串是否一样的
    String str1=" a bcgh";
    boolean a=str1.equals("bcgh");
    System.out.println(a);//false
    boolean b="abc".equals(str1);
    System.out.println(b);//false   荐写法  将字符串写到前边  可以防止空指针异常
       boolean c=" A bcgh".equalsIgnoreCase(str1);
        System.out.println(c);//true   忽略大小写比较   注意

equalsIgnoreCase() 忽略大小写比较 注意
6、字符串的一些获取方法

方法名 含义
public int length(){} 获取字符串中字符的个数,拿到字符串长度
public String concat(String str){} 将当前字符串与参数字符串拼接,得到一个新的字符串
public char charAt(int index){} 返回指定索引位置的单个字符(索引从0开始)
public int indexOf(String str){} 查找参数字符串在本字符串中首次出现的索引位置,如果没有则返回-1
public String substring(int index){} 截取从参数位置一直到字符串末尾。返回新的字符串
public String substring(int begin ,int end){} 截取从开始索引到结束索引之间的字符串。返回新的字符串,前闭后开
public boolean endsWith(String str){} 判断字符串是否以指定的字符串结尾
public boolean startsWith(String str){} 判断字符串是否以指定的字符串开头
public String trim(){} 清楚左右两端的空格,并返回清除空格后的字符串
replace(oldStr,newStr){} 将所有出现的老字符串替换成新的字符串,并返回结果字符串。
public String[] split(String regex){} 按照参数的规则将字符串拆分成若干部分,返回一个数组。

注意:在java中字符串就是常量。就算对一个字符串进行操作,原来的字符串还是不会改变,只不过又生成了新的字符串。
我们做的对字符串的任何操作,都不会改变原有字符串,但是会创建新的字符串对象。

String str1 = "abc";
str1 = "123";
System.out.println(str1);
//此时输出str1值发生了改变,跟上边说的字符串不可变相违背。其实并没有,因为str1中保存的是地址
//值,第一句代码,str1指向 常量"abc",当第二句代码执行后,str1指向了新的常量”123“。所以说
//改变字符串的值,其实就是改变了引用的地址值。

**问题:**当拼接字符串操作时,因为字符串是不可变的,所以当我们拼接字符串时,每拼一次就会在常量池中生成一个新的字符串,开辟一块新的内存空间,如果拼接一亿次,就会开辟很多内存空间,严重浪费(浪费时间,浪费内存空间)。如何解决?
字符串的拼接问题和解决方案

7、StringBuffer和StringBuilder
string字符串不可变,每一次赋值都是新开辟一个内存 比较浪费内存 而这两个方法可以设置可变字符串可以直接改变字符串

StringBuffer
在这里插入图片描述

StringBuilder
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


```java
 public static void main(String[] args) {
    
    
        long start =System.currentTimeMillis();//返回当前时间的毫米数
        String  str="0";
        for(int i=1;i<=100000;i++){
    
    
                str+=i;
        }
       // System.out.println(str);
        long end=System.currentTimeMillis();
        System.out.println(end-start);
        System.out.println("=========================");

        long start1=System.currentTimeMillis();
        StringBuffer buffer=new StringBuffer("0");
        for(int i=1;i<=100000;i++){
    
    
            buffer.append(i);
        }
        //System.out.println(buffer);
        long end1=System.currentTimeMillis();
        System.out.println(end1-start1);

        long  start2=System.currentTimeMillis();
        StringBuilder builder=new StringBuilder();
        for(int i=1;i<=10000;i++){
    
    
            buffer.append(i);
        }
        long end2=System.currentTimeMillis();
        System.out.println(end2-start2);
    }

可以观察到StringBuffer 和StringBuilder要比String快很多倍。

字符串拼接推荐使用:StringBuffer



## **二、时间类**
**1、Date类**

```java
//获取一个日期对象
Date date=new Date();
System.out.prinln(date);

2.SimpleDateFormat类 格式化日期。
在这里插入图片描述

功能:格式化和解析日期
1.将Date类型的日期格式化成我们需要的日期类型, 一般是 字符串类型
2.将字符串类的日期在转回来。

方法名 描述
format(Date date) 将date型转换成特定格式的字符串
parse(String str) 将字符串str转换成特定格式的date型

上面得到的date格式不是常用的格式 ,但是可以转化成常用的格式。

SimpleDateFormat类 中的 format(Date date) 将date型转换成特定格式的字符串。

 public static void main(String[] args) {
    
    
        // 格式 new SimpleDateFormat("yyyy-MM-dd W w EEE hh:mm:ss");
        //  显示格式    2021-8-6  16:36  2021-8-6 16:36
        //yyyy---> 年
        //MM--->  月
        //dd --> 日
        //HH --> 24小时制
        //hh--> 12小时制
        //mm --> 分钟
        //ss -->秒
        //EEE -->星期
        //W --> 一月中的第几周
        //w--> 一年中的第几周
        Date date =new Date();
        System.out.println(date);//SimpleDateFormat日期格式化
        SimpleDateFormat sm1=new SimpleDateFormat("yyy/MM/dd W w EEE hh:mm:ss");
        String ss=sm1.format(date);//format 格式
        System.out.println(ss);
        

    }

通过SimpleDateFormat类将一个字符串格式的日期 转换成Date类型
使用parse(String str)将字符串str转换成特定格式发date型

  Date date =new  Date(); //当前的国际时间
        System.out.println(date);
        System.out.println(date.getTime()); //getTime  获取毫米级的秒数
        System.out.println(date.getHours());//Hours 获取时间

        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd W w EEE hh:mm:ss");//格式化有一个时间

        String s=sdf.format(date); //将国际时间给这个  格式的 输出查看  format格式转化
        System.out.println(s);
        //将中国通用格式String---》Date类型
        String str = "2020-11-13 星期五 11:40:24";//自己设置一个时间格式
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
        //parse方法将字符串转换成Date形式的
        Date a=sdf1.parse(str);
        System.out.println(a);
        String b=sdf1.format(a);
        System.out.println(b);

3、jdk1.8之后的新增的数据相关类

时间相关类 介绍
LocalDateTime 时间处理类,返回日期时间
LocalDate 时间处理类,返回日期
LocalTime 返回时间
DateTimeFormatter 格式化日期类
Duration 类以秒和纳秒为单位建立数量或时间量
Period 以年,月和日为单位建立数量或时间量
方法 含义
now.format(DateTimeFormatter dateTimeFormatter)
如何拿到DateTimeFormatter? 通过
通过DateTimeFormatter类中的ofPattern();可以拿到 括号中就定义我们需要的格式
将日期转化成字符串类型
parse(str,DateTimeFormatter dateTimeFormatter) 将字符串转化成日期类型
  LocalDate now = LocalDate.now();//返回日期 2021-08-07
        System.out.println(now);

        LocalDateTime now1=LocalDateTime.now();//返回日期时间2021-08-07T09:35:03.810
        System.out.println(now1);

        LocalTime now2=LocalTime.now();//返回时间09:35:03.810
        System.out.println(now2);

        DateTimeFormatter now3=DateTimeFormatter.ofPattern("yyyy/MM/dd");
        String aa=now.format(now3);//将日期转化成字符串  在用format分析这个这个格式2021/08/07


        System.out.println(aa);

        String str ="2021/10/16";
        DateTimeFormatter dat=DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate date=LocalDate.parse(str,dat);
        System.out.println(date);//2021-10-16  将字符串转化成Date类型

猜你喜欢

转载自blog.csdn.net/qq_45438019/article/details/119457041