Java 《StringBuffer/StringBuilder 》类、日期时间(基础5)

一、Java StringBuffer 和 StringBuilder 类

1、当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类;

2、和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer;

3、 StringBuilder 相较于 StringBuffer 有速度优势,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

//1、StringBuilder类
public class RunoobTest{
    public static void main(String args[]){
        StringBuilder sb = new StringBuilder(10);//新建对象存储在堆中
        sb.append("Runoob..");//append,将内容添加到对象中
        System.out.println(sb);  //Runoob..
        sb.insert(8, "Java");//insert,从第八位开始添加Java
        System.out.println(sb);   //Runoob..Java
        sb.delete(5,12);//delete,从第五位开始删除到第12位(但不包含第12)
        System.out.println(sb);  //Runoo
        sb.replace(0,1,"qo");
        System.out.println(sb);  //qonoo
        sb.reverse();
        System.out.println(sb);  //oonoq
    }
}
/*2、StringBuffer 类,基本用法一致,多一个线程安全,StringBuffer 的所有公开
方法都是 synchronized 修饰的,而 StringBuilder 并没有,可以同步访问*/

 

序号方法描述
1int capacity()
返回当前容量
2char charAt(int index)
返回此序列中指定索引处的 char 值
3void ensureCapacity(int minimumCapacity)
确保容量至少等于指定的最小值
4void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组 dst
5int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引
6int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引
7int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引
8int lastIndexOf(String str, int fromIndex)
返回 String 对象中子字符串最后出现的位置
9int length()
 返回长度(字符数)
10void setCharAt(int index, char ch)
将给定索引处的字符设置为 ch
11void setLength(int newLength)
设置字符序列的长度
12CharSequence subSequence(int start, int end)
返回一个新的字符序列,该字符序列是此序列的子序列
13String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列
14String substring(int start, int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列
15String toString()
返回此序列中数据的字符串表示形式

 具体使用可类比参考Java学习总结(4)-CSDN博客

 二、Java 日期时间

2.1 Date类

java.util 包提供了 Date 类来封装当前的日期和时间。

使用当前日期和时间来初始化对象 : Date date = new Date();

Date 对象创建后,可调用的常用方法:

序号方法和描述
1boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false
2boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false
3Object clone( )
返回此对象的副本
4int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数
5int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException
6boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false
7long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
8int hashCode( )
返回此对象的哈希码值
9void setTime(long time)
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期
10String toString( )
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)

//1、获取当前日期和时间
import java.util.Date;
  
public class DateDemo {
   public static void main(String[] args) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用 toString() 函数显示日期时间
       System.out.println(date.toString());
   }
}



/*2、日期比较

使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。

使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。

使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。*/



//3、使用 SimpleDateFormat 格式化日期
import  java.util.*;
import java.text.*;
 
public class DateDemo {
   public static void main(String[] args) {
 
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
//java.text包————yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒
      System.out.println("当前时间为: " + ft.format(dNow));
//当前时间为: 2018-09-06 10:16:34
   }
}



//4、格式化输出日期的实例
import java.util.Date;
public class DateFormatExample {
   public static void main(String[] args) {
      Date date = new Date();
      System.out.printf("%tY-%tm-%td %tH:%tM:%tS %tZ", date, date, date, date, date, date);
   }
}
//2023-02-24 13:34:45 GMT+08:00



//4+、格式化输出日期的实例
import java.util.Date;
 
public class DateDemo {
 
  public static void main(String[] args) {
     // 初始化 Date 对象
     Date date = new Date();
 
     //c的使用  
    System.out.printf("全部日期和时间信息:%tc%n",date);          
    //f的使用  
    System.out.printf("年-月-日格式:%tF%n",date);  
    //d的使用  
    System.out.printf("月/日/年格式:%tD%n",date);  
    //r的使用  
    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
    //t的使用  
    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
    //R的使用  
    System.out.printf("HH:MM格式(24时制):%tR",date);  
  }
}
/*
全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM格式(12时制):10:43:36 上午  
HH:MM:SS格式(24时制):10:43:36  
HH:MM格式(24时制):10:43  
*/


//5、java休眠
import java.util.*;
  
public class SleepDemo {
   public static void main(String[] args) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(1000*3);   // 休眠3秒
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) { 
          System.out.println("Got an exception!"); 
      }
   }
}
/*
Thu Sep 17 10:20:30 CST 2015

Thu Sep 17 10:20:33 CST 2015
*/

 Java 格式化输出 printf 用法 | 菜鸟教程

2.2 Calendar类

1、Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些;

2、Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可;

3、Calendar 的月份是从 0 开始的,但日期和年份是从 1 开始的。

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 , 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

//把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);

//把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);

//把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);

//把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);

Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

2.3 GregorianCalendar类

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。

import java.util.*;
  
public class GregorianCalendarDemo {
 
   public static void main(String[] args) {
      String months[] = {
      "Jan", "Feb", "Mar", "Apr",
      "May", "Jun", "Jul", "Aug",
      "Sep", "Oct", "Nov", "Dec"};
      
      int year;
      // 初始化 Gregorian 日历
      // 使用当前时间和日期
      // 默认为本地时间和时区
      GregorianCalendar gcalendar = new GregorianCalendar();
      // 显示当前时间和日期的信息
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));
      
      // 测试当前年份是否为闰年
      if(gcalendar.isLeapYear(year)) {
         System.out.println("当前年份是闰年");
      }
      else {
         System.out.println("当前年份不是闰年");
      }
   }
}

/*
Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年
*/

参考资料:菜鸟教程 - 学的不仅是技术,更是梦想!

参考文献:String、StringBuffer、StringBuilder 全总结 - 知乎

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S0fM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值