本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第十三章 java常用类
1. 字符串相关类
1.1 String类
1.1.1 new和不new的区别
public class TestString{
public statuc void main(String[] args){
String s1 = new String("a");
String s2 = new String("a");
//false
System.out.println(s1 == s2);
String s3 = "a";
String s4 = "a";
//true
System.out.println(s3 == s4);
}
}
不new的话,如果是第一次遇见这个字符串,就会在常量池创建一个引用,从始至终就创建了一次,如果再有新的字符串创建,优先在常量池查找
1.1.2 String常用的20个方法
-
和长度有关的方法
序号 返回类型 方法签名 作用 1 int length() 得到一个字符串里边的字符个数 -
和数组有关的方法
序号 返回类型 方法签名 作用 2 byte[] getBytes() 将一个字符串转换成字节数组 3 char[] toCharArray() 将一个字符串转换成字符数组 4 String[] split(String) 将一个字符串按照指定的内容劈开 -
和判断内容有关的方法
序号 返回类型 方法签名 作用 5 boolean equals(String) 区分大小写的判断两个字符串的内容是否一模一样 6 boolean equalsIgnoreCase(String) 忽略大小写的比较两个字符串的内容是否一模一样 7 boolean contains(String) 判断一个字符串里面是否出现了某个指定内容 8 boolean startsWith(String) 判断一个字符串是否以指定的内容开头 9 boolean endsWith(String) 判断一个字符串是否以指定的内容结尾 -
和改变内容有关的
序号 返回类型 方法签名 作用 10 String toUpperCase() 将一个字符串全部转换成大写 11 String toLowerCase() 将一个字符串全部转换成小写 12 String replace(String,String) 将一个字符串里面出现的某个内容全部替换成指定的内容 13 String replaceAll(String,String) 将一个字符串里面出现的某个内容全部替换成指定的内容 【支持正则表达式】 14 String replaceFirst(String s1,String s2) 将字符串中第一次出现的s1换第二个s2 15 String trim() 去除字符串前后的空格 16 String substring(int x,int y) 截取x到y - 1的字符串 17 String substring(int x) 截取 x 到最后的字符串 -
和位置有关的方法
序号 返回类型 方法签名 作用 18 char charAt() 找到指定下标处对应的一个元素 19 int indexOf(String) 找到某个内容第一次出现的下标 20 int lastIndexOf(String) 找到某个内容最后一次出现的下标
1.1.3 String StringBuffer StringBuilder 之间的区别
-
String和StringBuffer、StringBuilder之间的区别
String类创建对象的时候正好够用,但是StringBuffer以及StringBuilder在创建对象的时候会预留16块缓冲区,为了防止追加连接的时候效率过低
public class TestString{ public static void main(String[] args){ String s = new String(""); long t1 = System.currentTimeMillis(); for(int i = 0;i <= 100000;i++){ s += i; } long t2 = System.currentTimeMillis(); System.out.println(t2 - t1); StringBuffer bf = new StringBuffer(""); long t3 = System.currentTimeMillis(); for(int i = 0;i <= 100000;i++){ bf.append(i); } long t4 = System.currentTimeMillis(); System.out.println(t4 -t3); } } -
StringBuffer和StringBuilder之间的区别
- StringBuffer同一时间允许一个线程进行访问,效率较低,但是不会出现并发错误
- StringBuilder同一时间允许多个线程进行访问,效率较高,但是可能会出现并发错误
1.2 StringBuffer 和 StringBuilder
当 StringBuffer 空间被占满了,还要新增数据的话,会进行扩容,公式(原有长度 + 新增字符串长度) * 2
==StringBUffer的常用方法==
-
增加:append
append(xxx); 用于字符串拼接
-
删除:delete
delete(int start, int end); 用于删除指定位置的内容
-
修改 setCharAt / replace
setCharAt(int n,char c);把指定下标的内容替换成指定字符
replace(int start, int end ,String str);把[start,end)位置的内容替换成str
-
查询:charAt
与String用法一样
-
插入:insert
insert(int offset, xxx);在指定位置插入xxx
-
反转:reverse
把当前字符序列逆转
2. JDK8.0之前的日期API
2.1 System的静态方法currentTimeMillis()
返回当前时间到1970年1月1日0:0:0之间的毫秒数,通常称之为时间戳
2.2 Date类
java.util.Date |----- java.sql.Date 对应的是数据库中的日期类型的变量
-
构造方法:Date()
Date date1 = new Date(); //显示当前的年月日时分秒 System.out.println(date1.toString()); //获取当前Date对象对应的时间戳 System.out.println(date1.getTime()); -
java.sql.Date如何实例化对象
//import java.sql.Date; java.sql.Date d = new java.sql.Date(12312421414L); -
如何把 util.Date 对象转换成 sql.Date 对象
//强转 Date d2 = new java.sql.Date(12312412L); java.sql.Date d3 = (java.sql.Date)d2; //使用getTime() Date d4 = new Date(); java.sql.Date d5 = new java.sql.Date(d4.getTime());
2.3 Calendar类
2.4 SimpleDateFormat类
public class Test{
public static void main(String[] args){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化 日期到字符串
String format1 = sdf.format(date);
System.out.println(format1);
//解析 字符串到日期
//要求字符串必须是符合SimpleDateFormat格式的
Date date2= sdf.parse("2020-02-06 17:48:13");
System.out.println(date2);
}
}
3. JDK8.0之后的日期API
3.1 LocalDate,LocalTime,LocalDateTime
public class Test{
public static void main(String[] args){
//now():获取当前的日期
LocalDate lc = LocalDate.now();
/*
时间用LocalTime
日期加时间 LocalDateTime
*/
//of()
LocalDateTme ldt = LocalDateTime.of(2020,2,6,17,56,48);
/*
其他方法
getXXX()
*/
LocalDateTme ldt2 = LocalDateTime.withDayOfMonth(2);
}
}
3.2 Instant
public class {
public static void main(String[] args){
Instant in = Instant.now();
}
}
3.3 DateTimeFormatter
- 预定义的标准格式
DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime lc = LOcalDateTime.now();
System.out.println(dtf.format(lc));