String类及Date、SimpleDateFormat、Calendar的基本用法

一、String类的基本用法

1.1. String的注意事项

注意:1. String表示字符串类型,属于 引用数据类型,不属于基本数据类型。

            2. 在java中随便使用 双引号括起来 的都是String对象。

           例如:“abc”,“def”,“hello world!”,这是3个String对象

1.2 String类的不变性

1.字符串是常量,在创建之后不能更改

其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。

2.源码分析,String类底层采用的是字符数组:
private final char value[]
private 修饰说明value只能在String类内部使用,而且又没有提供get方法,所以外部无法获取value数组,就无法改变数组中元素的值。
final修饰说明value是常量,一旦创建,就不能被改变,value一旦被初始化成某个数组,将永远指向这个数组,不可能再指向其它的数组了。

1.3 String类特点:

1. 一切都是对象,字符串事物 "" 也是对象。

2.类是描述事物,String类,描述字符串对象的类。

3.所有的 "" 都是String类的对象。

4.字符串是一个常量,一旦创建,不能改变。

 例题:

public class StringDemo {
			public static void main(String[] args) {
				//引用变量str执行内存变化
				//定义好的字符串对象,不变
				String str = "abc";
				System.out.println(str);
				str = "edf";
				System.out.println(str);
				}
				}

1.4 String类创建方式和比较

创建对象的数量比较
String s3 = “abc”;
在内存中只有一个对象。这个对象在字符串常量池中
String s4 = new String(“abc”);
在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中
 

 例题:

public class StringDemo2 {
	public static void main(String[] args) {
		//字符串定义方式2个, 直接=  使用String类的构造方法
		String str1 = new String("abc");
		String str2 = "abc";
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str1==str2);//引用数据类型,比较对象的地址 false
				System.out.println(str1.equals(str2));//true
			}
		}

 1.5 String类构造方法(常见构造方法) 

  public String():-------空构造
  public String(byte[] bytes):-------把字节数组转成字符串
  public String(byte[] bytes,int index,int length):-------把字节数组的一部分转成字符串
  public String(String original):-------把字符串常量值转成字符串

例题:

class StringTest{
    public static void main(String[] args) {
    	//最常用的方式
        String s1 = "我爱你中国";
        System.out.println(s1);//我爱你中国

        String s2 = new String("我爱你中国");
        System.out.println(s2);//我爱你中国

        char[] c = {'我' , '爱', '你', '中', '国'};
        String s3 = new String(c);
        System.out.println(s3);//我爱你中国
        String s4 = new String(c, 2, 3);
        System.out.println(s4);//你中国

        byte[] b = {65, 66 ,67, 68};
        String s5 = new String(b);
        System.out.println(s5);//ABCD

        String s6 = new String(b, 1, 2);
        System.out.println(s6);//BC

        StringBuffer sb1 = new StringBuffer("我和我的祖国");
        String s7 = new String(sb1);
        System.out.println(s7);//我和我的祖国

        StringBuilder sb2 = new StringBuilder("我和我的家乡");
        String s8 = new String(sb2);
        System.out.println(s8);//我和我的家乡
    }
}

 1.6 String类的内部方法

int length(): 返回字符串的长度。
String substring(int beginIndex,int endIndex): 获取字符串的一部分。
String substring(int beginIndex): 获取字符串的一部分。
boolean startsWith(String prefix): 判断一个字符串是不是另一个字符串的前缀,开头。
boolean endsWith(String prefix): 判断一个字符串是不是另一个字符串的后缀,结尾。
boolean contains (String s): 判断一个字符串中,是否包含另一个字符串。
int indexOf(char ch):  查找一个字符,在字符串中第一次出现的索引,被查找的字符不存在,返回-1。
byte[] getBytes(): 将字符串转成字节数组,此功能和String构造方法相反,byte数组相关的功能,查询编码表。
char[] toCharArray(): 将字符串转成字符数组,功能和构造方法相反。
boolean equals(Object obj): 方法传递字符串,判断字符串中的字符是否完全相同,如果完全相同返回true。
boolean equalsIgnoreCase(String s): 传递字符串,判断字符串中的字符是否相同,忽略大小写。        
 

 例题:

class StringTest{
    public static void main(String[] args) {
        String s1 = "hello world";

        System.out.println(s1.charAt(6));//w

        String s2 = "abc";
        String s3 = "xyz";
        String s4 = "xyz";
        System.out.println(s2.compareTo(s3));//-23
        System.out.println(s3.compareTo(s4));//0
        System.out.println(s4.compareTo(s1));//16

        System.out.println(s2.equals(s3));//false

        System.out.println(s1.endsWith("world"));//true
        System.out.println(s1.endsWith("t"));//false

        String s5 = "HELLO worLD";
        System.out.println(s1.equalsIgnoreCase(s5));//true

        byte[] b = s1.getBytes();
        System.out.println(Arrays.toString(b));//[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

        System.out.println(s1.indexOf("world"));//6
        System.out.println(s1.indexOf("h"));//0

        System.out.println(s1.isEmpty());//false

        System.out.println(s1.length());//11

        String s6 = "javapythonc++cphpjavapython";
        System.out.println(s6.lastIndexOf("java"));//17
        System.out.println(s6.lastIndexOf("h"));//24

        String s7 = "name=zhangsan&age=18&sex=男";
        String newS7 = s7.replace("&", ";");
        System.out.println(newS7);//name=zhangsan;age=18;sex=男

        String[] splitS7 = s7.split("&");
        System.out.println(Arrays.toString(splitS7));//[name=zhangsan, age=18, sex=男]

        System.out.println(s6.startsWith("java"));//true
        System.out.println(s6.startsWith("python"));//false

        System.out.println(s6.substring(10));//c++cphpjavapython
        System.out.println(s6.substring(10, 13));//c++

        char[] charS6 = s6.toCharArray();
        System.out.println(Arrays.toString(charS6));//[j, a, v, a, p, y, t, h, o, n, c, +, +, c, p, h, p, j, a, v, a, p, y, t, h, o, n]

        System.out.println(s6.toUpperCase());//JAVAPYTHONC++CPHPJAVAPYTHON

        System.out.println(s5.toLowerCase());//hello world

        String s8 = "           你 好 世 界                   ";
        System.out.println(s8.trim());//你 好 世 界

        System.out.println("------------------------------");

        System.out.println(String.valueOf(123));//123
        System.out.println(String.valueOf(3.14));//3.14
        System.out.println(String.valueOf(true));//true
        System.out.println(String.valueOf(new Object()));//java.lang.Object@4554617c
        //valueOf会自动调用toString()方法

    }
}

二、Date类

2.1 Date的概念

Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

2.2 构造方法
Date 类有如下两个构造方法。

Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。

Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
例题:

Date date1 = new Date();    // 调用无参数构造函数
System.out.println(date1.toString());    // 输出:Wed May 18 21:24:40 CST 2016
Date date2 = new Date(60000);    // 调用含有一个long类型参数的构造函数
System.out.println(date2);    // 输出:Thu Jan 0108:01:00 CST 1970

2.3 常用方法

方法 描述
boolean after(Date when) 判断此日期是否在指定日期之后
boolean before(Date when) 判断此日期是否在指定日期之前
int compareTo(Date anotherDate) 比较两个日期的顺序
boolean equals(Object obj) 比较两个日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString() 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。
其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

例题1:

String类及Date、SimpleDateFormat、Calendar的基本用法_第1张图片

例 题2:

假设,某一天特定时间要去做一件事,而且那个时间已经过去一分钟之后才想起来这件事还没有办,这时系统将会提示已经过去了多 长时间。具体的代码如下:

import java.util.Date;
import java.util.Scanner;
 
public class Test11 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要做的事情:");
        String title = input.next();
        Date date1 = new Date(); // 获取当前日期
        System.out.println("[" + title + "] 这件事发生时间为:" + date1);
        try {
            Thread.sleep(60000);// 暂停 1 分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Date date2 = new Date();
        System.out.println("现在时间为:" + date2);
        if (date2.before(date1)) {
            System.out.println("你还有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】这件事!");
        } else {
            System.out.println("【" + title + "】事情已经过去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");
        }
    }
}

三、SimpleDateFormat类

3.1 什么情况下使用SimpleDateFormat

1. 在Java中,如果我们想获取当前时间,一般会使用Date类的无参构造函数,如下所示,我们获取到当前时间并输出:

1

2

3

4

5

6

7

8

import java.util.Date;

 

public class SimpleDateFormatDemo {

    public static void main(String[] args) {

        Date currentTime = new Date();

        System.out.println(currentTime); // 输出:Mon Feb 18 10:24:30 CST 2019

    }

}

此时我们会发现, 输出的格式并不是我们预期的格式,一般情况下,我们希望的格式都是类似于2019-02-18,2019-02-18 10:24:30,2019/02/18这样的,此时我们就需要用到java.text.SimpleDateFormat来自定义格式。

2.它是DateFormat类的直接子类继承DateFormat类

3.2 使用format()方法将日期转换为字符串

使用format()方法,我们可以将日期类型转换为自己自定义的字符串格式,如2019-02-18,2019/02/18,2019-02-18 10:24:30等,自定义格式如下表所示:

格式 释义 举例
yyyy 2019
MM 02
dd 18
HH 小时(24小时制) 13,下午一点
mm 分钟 53
ss 42
SSS 毫秒 629

例题1:

String类及Date、SimpleDateFormat、Calendar的基本用法_第2张图片

例题2:

package com.zwwhnly.springbootdemo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {

    public static void main(String[] args) {

        Date currentTime = new Date();

        System.out.println(currentTime);    // Mon Feb 18 13:53:50 CST 2019

        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");

        SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy/MM/dd");

        System.out.println(simpleDateFormat1.format(currentTime));  // 输出2019-02-18 13:53:50.629

        System.out.println(simpleDateFormat2.format(currentTime));  // 输出2019-02-18

        System.out.println(simpleDateFormat3.format(currentTime));  // 输出2019/02/18

    }

}

四、Calenar类(日历类)

4.1 Calendar概念

1. Calendar 类是一个抽象类
它为“特定瞬间”与一组诸如 “YEAR”、“MONTH”、“DAY_OF_MONTH”、“HOUR ”等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
2. Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象。

例题:

package com.hp.date;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo{
    public static void main(String[] args) throws Exception {
        //获取获取系统的当前日历对象
        Calendar instance = Calendar.getInstance();

        //1、获取今天是周几
        int weekDay = instance.get(Calendar.DAY_OF_WEEK);
        System.out.println("今天是周:" + (weekDay - 1));

        //2、获取系统当前年
        int year = instance.get(Calendar.YEAR);
        System.out.println("今年是:" + year + "年");

        //3、获取系统当前月
        int month = instance.get(Calendar.MONTH);
        System.out.println("本月是:" + (month + 1) + "月");

        //4、获取系统当前日
        int day = instance.get(Calendar.DATE);
        System.out.println("今天是" + day + "号");

        //5、获取上午跟下午
        int am_pm = instance.get(Calendar.AM_PM);
        if (am_pm == 0)
            System.out.println("是上午");
        else
            System.out.println("是下午");

        //6、获取当前的系统时间[date-->String]的过程
        Date time = instance.getTime();//获取的是当前系统的时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String showTime = format.format(time);
        System.out.println("当前系统时间为:" + showTime);

        //7、自定义日历的时间
        String strTime = "2021-07-07";
        Date date = new SimpleDateFormat("yyyy-MM-dd").parse(strTime);
        instance.setTime(date);//将时间对象data设置为新的日历
        System.out.println("修改后的系统时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(instance.getTime()));
    }
    
  		System.out.println("------------Calendar和Date转换------------");
        Date now = calendar.getTime();
        calendar.setTime(now);


        System.out.println("------------Calendar日期计算以及判断------------");
        calendar = new GregorianCalendar();
        Calendar calendar2 = new GregorianCalendar();
        calendar2.set(Calendar.YEAR, 2800);
        //是否在某个时间(calendar2)之后
        System.out.println(calendar.after(calendar2));
        //是否在某个时间(calendar2)之前
        System.out.println(calendar.before(calendar2));
        //增加多少年年,月日以及时分秒同理
        calendar.add(Calendar.YEAR, -10);

    } 
}

4.2 Calendar 与 Date 之间的转换

Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
// 所以我们必需先获得一个实例,然后设置 Date 对象
calendar.setTime(date);

 例题:

String类及Date、SimpleDateFormat、Calendar的基本用法_第3张图片

你可能感兴趣的:(servlet,java,开发语言)