一、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 并没有,可以同步访问*/
序号 | 方法描述 |
1 | int capacity() 返回当前容量 |
2 | char charAt(int index) 返回此序列中指定索引处的 char 值 |
3 | void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst |
5 | int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引 |
6 | int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引 |
7 | int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引 |
8 | int lastIndexOf(String str, int fromIndex) 返回 String 对象中子字符串最后出现的位置 |
9 | int length() 返回长度(字符数) |
10 | void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch |
11 | void setLength(int newLength) 设置字符序列的长度 |
12 | CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列 |
13 | String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列 |
14 | String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列 |
15 | String toString() 返回此序列中数据的字符串表示形式 |
具体使用可类比参考Java学习总结(4)-CSDN博客
二、Java 日期时间
2.1 Date类
java.util 包提供了 Date 类来封装当前的日期和时间。
使用当前日期和时间来初始化对象 : Date date = new Date();
Date 对象创建后,可调用的常用方法:
序号 | 方法和描述 |
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false |
3 | Object clone( ) 返回此对象的副本 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数 |
8 | int hashCode( ) 返回此对象的哈希码值 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期 |
10 | String 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
*/
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
当前年份不是闰年
*/
参考资料:菜鸟教程 - 学的不仅是技术,更是梦想!