Java中的常用类
一、String类
1.相关概念
(1)引用数据类型
▼String表示字符串类型,是引用数据类型,不属于基本数据类型。
▼String类在java.lang包中。
(2)字符串的标志
▼字符串的标志是双引号,而且字符串是常量,不可变。
▼在JDK中,字符串是存储在方法区字符串常量池中,为了提升开发效率高,并且Java中的垃圾回收器不会回收常量。
(3)字符串的并置运算
String s1="abc";
String s2="def"+"gfhi";
s1是字符串常量"abc"的引用,即abc的内存地址,即s1是存储地址的变量。
▼s2语句中实际在在常量池中生出三个字符串常量对象,“def”,“gfhi”,最后因为加号并置运算生成"defgfhi"对象,s2指向"defgfhi"。
▼在Java中无法输出引用,因为调用引用时自动调用重写(构造时已经重写)后toString()输出字符串。
(4)另一种创建方法
String s3=new String("xy");
可以采用类new创建方法,其构建原理如图所示,存储在堆中。
(5)同一个引用
package string;
public class Stringtest {
public static void main(String args[]){
String s1="hello";
String s2="hello";
System.out.println(s1==s2);
}
}
打印输出为true,证明s1与s2指向同一个引用
package string;
public class Stringtest {
public static void main(String args[]){
String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1==s2);
}
}
打印输出为false,证明在堆中s1与s2不是同一个类对象,而且说明字符串比较不应用==来比较
2.String类常用方法
(1)String构造方法
ackage string;
public class Stringtest {
public static void main(String args[]){
String s1="我爱你中国";
String s2=new String("我爱你中国");
char[] chas={'我','爱','你','中','国'};
String s3=new String(chas);
String s4=new String(chas,0,5);//起始下标,终点下标,左闭右开
byte[] bytes={'a','b','c'};
String s5=new String(bytes);
String s6=new String(bytes,0,3);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
System.out.println(s5);
System.out.println(s6);
}
}
(2)String.equals()方法
用于比较两个字符串是否相同,返回布尔值。
package string;
public class Stringtest {
public static void main(String args[]){
String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1.equals(s2));
}
}
与compareTo()方法不同,equals不能返回长度差,专一判断是否相同,执行效率更快。
拓展:String.equalsIgnoreCase()方法
package string;
public class Stringtest {
public static void main(String args[]){
String s1="ABCDE";
String s2="abcde";
System.out.println(s1.equalsIgnoreCase(s2));
}
}
输出true,这忽略字母大小进行比较,也比较常用。
(3)String.length()方法
返回字符串长度
package string;
public class Stringtest {
public static void main(String args[]){
String s1=new String("hello");
System.out.println(s1.length());
}
}
(3)String.charAt()方法
字符串索引,返回char型
package string;
public class Stringtest {
public static void main(String args[]){
String s1="我爱你中国";
System.out.println(s1.charAt(1));
}
}
输出字符"爱"。
(4)String.compareTo()方法
返回int型:
前>后,返回正值(不同长度返回长度差,相同长度返回字符集编码差)
前==后,返回0
前<后,返回负值(不同长度返回长度差,相同长度返回字符集编码差)
package string;
public class Stringtest {
public static void main(String args[]){
String s1="我爱你中国";
String s2="我爱你中国";
String s3="我爱你";
String s4="我爱你中国我爱你中国";
String s5="我爱你中华";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s1.compareTo(s4));
System.out.println(s1.compareTo(s5));
}
}
package string;
public class Stringtest {
public static void main(String args[]){
String s1="xyz";
String s2="yxz";
System.out.println(s1.compareTo(s2));
}
}
输出-1,因为方法只比第一个字母,后面不比了。
▼字符串比较只能用compareTo()方法。
(5)String.contains()方法
判断字符串中是否包含指定子字符串,返回布尔值。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="我爱你中国";
String s2="中国";
System.out.println(s1.contains(s2));
}
}
输出true
(6)String.endsWith()方法
判断字符串是否以指定子字符串结尾,返回布尔值。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="Test.class";
String s2=".class";
System.out.println(s1.endsWith(s2));
}
}
输出true,这在批量处理文件中常用。
拓展:String.startsWith()方法
判断字符串是否以指定子字符串开头,返回布尔值。
(7)String.isEmpty()方法
判断字符串是否为空,返回布尔值。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="";
System.out.println(s1.isEmpty());
}
}
输出为true,该方法底层调用String.length。
3.字符串与字符
(1)String.toCharArray()方法
可以将字符串转为一个字符数组,方便对每个字符进行操作
package string;
import java.nio.charset.StandardCharsets;
public class Stringtest {
public static void main(String args[]){
String s1="ABCDE";
char[] chars=s1.toCharArray();
for(char i:chars) {
System.out.println(i);
}
}
}
拓展1:String.getChars()方法
可以将字符串中子字符串转为一个字符数组,需要指定数组,起始下标,终点下标(左闭右开),以及数组开始存放单元的下标。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="中国人民从此站起来了";
char[] arr=new char[7];
s1.getChars(2,9,arr,0);
for(char i:arr){
System.out.println(i);
}
}
}
拓展2:String.getBytes()方法
将字符串转换为byte数组
package string;
import java.nio.charset.StandardCharsets;
public class Stringtest {
public static void main(String args[]){
String s1="ABCDE";
byte[] bytes=s1.getBytes(StandardCharsets.UTF_8);
for(byte i:bytes) {
System.out.println(i);
}
}
}
(2)String.indexOf()方法
查看目标子字符串在字符串中的第一次出现的索引。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="pythonc++javac";
System.out.println(s1.indexOf('a'));
}
}
输出10
拓展:String.lastIndexOf()
查看目标子字符串在字符串中的最后一次出现的索引。
(3)String.replace()方法
用于替换字符串中的目标字符。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="https://www.baidu.com";
String s2=s1.replace("baidu","google");
System.out.println(s2);
}
}
输出https://www.google.com
(3)String.spilt()方法
根据指定字符切分字符串。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="2020-10-01";
String[] strings=s1.split("-");
for(String i:strings)
System.out.println(i);
}
}
(4)String.substring()方法
截取字符串,需要指定开始下标,终点下标。
package string;
public class Stringtest {
public static void main(String args[]){
String s1="2020-10-01";
String s2=s1.substring(3,8);
System.out.println(s2);
}
}
输出0-10-。
(5)String.toLowerCase()方法
将字符串中的字符全传换小写
package string;
public class Stringtest {
public static void main(String args[]){
String s1="Mike";
String s2=s1.toLowerCase();
System.out.println(s2);
}
}
输出为mike
拓展:String.toUpperCase()
将字符串中的字符全传换大写
(6)String.trim()方法
去除字符串的前后空白,中间的空白并不去除
package string;
public class Stringtest {
public static void main(String args[]){
String s1=" Mike Amy John ";
System.out.println(s1.trim());
}
}
输出Mike Amy John,在网站登录开发中常用。
4.字符串与基本数据类型转换
(1)String.valueOf()方法
基本数据类型转换成字符串,这个属于静态方法。
package string;
public class Stringtest {
public static void main(String args[]){
String s1=String.valueOf(true);
String s2=String.valueOf(13);
System.out.println(s1);
System.out.println(s2);
}
}
输出"true",“13”,该方法底层调用重写后的obj.toString。
实际上System.out.println()方法都是将对象转换为obj.toString方法再输出。
二、Date类
1.构造方法
获取系统当前时间,可以达到毫秒级别。
package date;
import java.util.Date;
public class DateTest {
public static void main(String args[]) {
Date date = new Date();
System.out.println(date);
}
}
输出是一个日期字符串
2.SimpleDateFormat
日期格式化类,使用时需要指定日期格式
package date;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String args[]) {
Date date = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//格式化后的日期字符串
String nowTime=sdf.format(date);
System.out.println(nowTime);
}
}
输出为2021-12-24 21:21:05 980
3.String.format()方法
package date;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String args[]) {
Date date = new Date();
String nowTime=String.format("%tY年%tm月%td日",date,date,date);
System.out.println(nowTime);
}
}
输出2021年12月24日