在Java中,String类是字符串操作类,提供了多种方法对字符串进行操作,经过学习对String类的常用方法总结如下:
一、String字符串的创建
由于String类位于Java的lang包下,所以在使用时不需要通过import引入(导包)。String类是final类,不能被继承,对象创建后不可修改,并且由0或多个字符组成,包含在一对双引号之间。其次String类其实是通过char数组来保存字符串的,它值是不可变的。
所以,字符串的创建方式有如下3种:
首先,我们应该知道,每当我们创建一个字符串对象时,首先就会检查字符串常量池中是否存在面值相等的字符串,如果有,则不再创建,直接返回字符串常量池中对该对象的引用;若没有,则创建然后放入到字符串常量池中并且返回新建对象的引用。这个机制是非常有用的,因为可以提高效率,减少了内存空间的占用。
方式1:在字符串池里直接创建
String str1 = "just so so";`
String str2 = "just so so";
str2="just do it"
由于字符串池里已经有了“just so so”,所以当再定义String str2 = "just so so"时,str2不会再重新创建新字符串,而是会指向原来的字符串地址。
str2="just do it"时, str2重新创建新字符串"just do it"并指向了新的字符串地址。
方式2: 在堆中开辟空间,创建并保存字符串
String str3 = new String("just go go");
这种方法不仅在字符串池中创建了“just go go”,还在堆中开辟了一片内存,用来存储该字符串在字符串池里的地址。
方式3:将字符数组,转换成字符串
char[] chs = {
'g','o','g','o','!'};
String str4 = new String(chs);
System.out.println(str4);
二.String类的常用方法
1. equals() : 方法
== : 运算符,基本数据类型进行值的比较,引用数据类型进行内存地址的比较
equals() : 方法,基本数据类型没有方法,引用数据类型(String)进行值(字符串内容)的比较
// 基本数据类型
// int a = 12, b = 45;
System.out.println(a == b);//false
// 引用数据类型String
String str1 = "gogo";
String str2 = "gogo";
//引用数据类型进行内存地址的比较
String str3 = new String("gogo");
System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false
Scanner input = new Scanner(System.in);
String str4 = input.nextLine();
String str5 = input.nextLine();
System.out.println(str4 == str5);//false
//字符串内容的比较
boolean isEquals = str4.equals(str5);
System.out.println(isEquals);
2. String.valueOf()
功能:将指定类型转换为字符串类型
传入:需要转换的其他类型的数据(int,double,float,boolean,char[ ]数组)
返回:转换后的字符
// int => String
String strInt = String.valueOf(123);
System.out.println(strInt);
// double => String
String strDouble = String.valueOf(15.98);
System.out.println(strDouble);
// boolean => String
String strBoolean = String.valueOf(true);
System.out.println(strBoolean);
char[] array = {
65, 66, 67, 68, 69 };
String strArray = String.valueOf(array);
System.out.println(strArray);
3. String.format( )
功能:按照指定的格式字符串(”%d-%s-%f “),创建生成新字符串
传入:参数1:格式字符串(%s,%d,%f)
参数x:动态参数值(依次按占位符的位置,传入对应的值)
返回:按照格式,产生的新字符串
// 案例1
int num1 = 15, num2 = 30;
int sum = num1 + num2;
// 格式化输出
System.out.printf("%d+%d=%d\n", num1, num2, sum);
// 格式化字符串
String str = String.format("%d+%d=%d", num1, num2, sum);
System.out.println(str);
// 案例2
// xxxx年xx月
String now1 = LocalDate.now().getYear() + "年" + LocalDate.now().getMonthValue() + "月";
String now2 = String.format("%s年%s月", LocalDate.now().getYear(), LocalDate.now().getMonthValue());
System.out.println(now2);
// xx月xx日
String now3 = String.format("%s月%s日", LocalDate.now().getMonth(), LocalDate.now().getDayOfMonth());
System.out.println(now3);
4. charAt()
作用:按照指定的下标位置,获取对应的字符
传入: 下标位置(注意,下标位置不能“越界”)
返回:该下标位置对应的字符
String str1 = "ABCD";
System.out.println(str1.charAt(0)); //A
String str2 = "CDAA";
System.out.println(str2.charAt(0)); //C
5. toCharArray()
作用:将当前字符串转换为字符数组
传入:无
返回:该字符串对应的字符数组
String str3 = "天王盖地虎";
char[] chs = str3.toCharArray();
System.out.println(chs[1]);
System.out.println(chs[2]);
6.split( )
作用:按照指定的“字符串”,对原字符串进行切割
传入:指定字符串(进行切割的格式),指定字符串中如果包含特殊字符(正则表达式),需要使用 \\进行转义
返回:字符串数组,包含切割后的每个子字符串
// 功能:按照指定字符串进行切割,返回字符串数组
// 案例1
String sourceStr = "北京#-石家庄#-广州#-西安#-武汉";
String[] resultArray = sourceStr.split("#-");
for (String city : resultArray) {
System.out.println(city);
}
// 案例2
sourceStr = "渭城朝雨浥轻尘,客舍青青柳色新。劝君更近一杯酒,西出阳关无故人。";
String[] resultArray01 = sourceStr.split("。");
String[] resultArray011 = resultArray01[0].split(",");
String[] resultArray012 = resultArray01[1].split(",");
resultArray01 = new String[4];
System.arraycopy(resultArray011, 0, resultArray01, 0, 2);
System.arraycopy(resultArray012, 0, resultArray01, 2, 2);
System.out.println(Arrays.toString(resultArray01));
// 案例3
String ip = "192.168.16.118";
// 切割字符串如果是特殊符号(正则表达式),需加入\\进行转义
String[] ipArray = ip.split("\\.");
for(String strNum : ipArray) {
System.out.println(strNum);
}
// 案例4
sourceStr = "北京#$石家庄#$广州#$西安#$武汉";
// 切割字符串如果是特殊符号(正则表达式),需加入\\进行转义
String[] cityArray = sourceStr.split("#\\$");
for(String cityName : cityArray) {
System.out.println(cityName);
}
7.compareTo( )
作用:比较两个字符串之间的大小
比较规则:先比较两个字符串对应字符 ASCII码(英文)或Unicode码(中文)的"差", 如果比较的所有字符一致,再比较字符串的长度“差”。
传入:需要比较的另外一个字符串
返回:
正数:字符串1 > 字符串 2
零:字符串1 = 字符串2
负数:字符串1 < 字符串2
String str1 ="天";
String str2 ="地";
System.out.println(str1.compareTo(str2));
8. equals( ) 或 equalsIgnoreCase( )
作用:
equals( ) 比较字符串内容是否一致,区分大小写
equalsIgnoreCase( ) 比较字符串内容是否一致,不区分大小写
传入:需要比较的另外一个字符串
返回:
true:代表两个字符串内容一致
false:代表两个字符串内容不一致
String str1 ="天";
String str2 ="第";
System.out.println(str1.equals(str2));
String str3 = "nike";
String str4 = "NIKE";
System.out.println(str3.equalsIgnoreCase(str4));
9. contains( )
作用: 判断当前字符串中是否包含指定子字符串
传入:子字符串
返回:true:代表包含 false:代表不包含
String str1 = "ABABABASOSOASB";
System.out.println(str1.contains("soso"));
System.out.println(str1.contains("BA"));
String source = "SDKLSKDJFJSIODFOISDJFOJSDFJLSDF";
String world = "timi";
System.out.println(source.contains(world));
10.startsWith( )
作用:判断当前字符串是否以指定字符串“开头”
传入:子字符串
返回:true:是 false:不是
String url = "http://www.baidu.com";
System.out.println(url.startsWith("http"));
11.endsWith( )
作用:判断当前字符串是否以指定字符串“结尾”
传入:子字符串
返回:true:是 false:不是
String fileName = "weixin.docx";
System.out.println(fileName.endsWith(".png"));
12.indexOf( )
作用:查找子字符串的首次出现的位置
传入:
方式1: 子字符串,从当前字符串的下标0位置查找
方式2:子字符串,开始位置,从当前字符串的指定开始位置查找
返回:如果找到,则返回该子字符串的第一次出现的位置; 如果没有找到,则返回负数
// 案例1
String data1 = "陕西:{nowConfirm:0,confirmAdd:2,dead:0,heal:2,zero:0}";
int pos1 = data1.indexOf(":"); // 从下标0开始查找
System.out.println(pos1); // 2
int pos2 = data1.indexOf(":", 5); // 从下标5开始查找
System.out.println(pos2); // 18
// 案例2 : 判断email邮箱地址中,是否包含@,并且@的位置不在首位或尾部
String email = "billgmail.com"; // 正常
// String email02 = "@billgmail.com"; //错误
// String email03 = "billgmail.com@"; //错误
int pos = email.indexOf("@");
System.out.println(pos);
if (pos == 0 || pos == email.length() - 1 || pos < 0) {
System.out.println("邮箱格式有误");
} else {
System.out.println(
13.lastIndexOf( )
作用:查找子字符串的最后一次出现的位置
传入:查找的子字符串
返回:如果找到,则返回该子字符串的最后一次出现的位置; 如果没有找到,则返回负数
String str2="ABABCCDSCSKCDBKA";
//查找出子字符串第一次出现的位置
int pos01=str2.indexOf("CD");
System.out.println(pos01);
//查找出子字符串最后一次出现的位置
int pos02=str2.lastIndexOf("CD");
System.out.println(pos02);
14.replace( )
作用:替换子字符串(全部)
传入:子字符串, 替换字符串
返回:替换后的新字符串
// 案例1:替换标点符号
String content = "where there is a will there is a way,I will go where you will go,there you!finish this job";
content = content.replace(",", " ").replace("!", " ");
System.out.println(content);
// 案例2:
String src ="<img src=\"https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2621379901.webp\" alt=\"拆弹专家2\" rel=\"nofollow\" class=\"\" />"
+ " <img src=\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2618446242.webp\" alt=\"温暖的抱抱\" rel=\"nofollow\" class=\"\" />"
+ " <img src=\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2627788612.webp\" alt=\"沐浴之王\" rel=\"nofollow\" class=\"\" />";
//src = src.replace(".webp", ".jpg");
src = src.replaceFirst(".webp", ".png");
System.out.println(src);
15.replaceFirst( )
作用:替换子字符串( 第一个 )
传入:子字符串, 替换字符串
返回:替换后的新字符串
16.toUpperCase( )
作用:小写转大写
String str2 = UUID.randomUUID().toString();
str2 = str2.toUpperCase();
System.out.println(str2);
17.toLowerCase( )
作用:大写转小写
String str3 = "ABCDE";
str3 = str3.toLowerCase();
System.out.println(str3);
18.trim()
作用:去除字符串左右空格
传入:无
返回:去除左右空格后的新字符串
src = " <img src=\"https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2627788612.webp\" alt=\"沐浴之王\" rel=\"nofollow\" class=\"\" />";
System.out.println("使用前:"+src);
//src = src.replace(" ", ""); //将字符中的所有空格替换为""字符串
src = src.trim(); //去除字符串的左右空格
System.out.println("使用后:"+src);
19.substring()
功能:截取子字符串
返回:截取后的子字符串
String fileName = "weweweweweok.apk";
int beginPos = fileName.indexOf("."); // 查找.的位置
// 案例1:截取后缀名
// 从指定开始位置,截取至字符串的尾部(截取后缀名)
String suffix = fileName.substring(beginPos);
System.out.printf("%s的后缀名是%s\n", fileName, suffix);
// 案例2:截取文件名
String name = fileName.substring(0, beginPos);
System.out.printf("%s的文件名是%s\n", fileName, name);
// 案例3:提取confirmAdd对应的数据
String data2 = "河北:{nowConfirm:114,confirmAdd:100,dead:0,heal:103,zero:2}";
// 找出confirmAdd的位置
int confirmAddIndex = data2.indexOf("confirmAdd");
// 从confirmAdd的位置开始查找第1个“:”的下一个位置
int beginIndex = data2.indexOf(":",confirmAddIndex) + 1;
// 从confirmAdd的位置开始查找第1个“,”的位置
int endIndex = data2.indexOf(",",confirmAddIndex);
String strData = data2.substring(beginIndex, endIndex);
System.out.println(strData);
20.String.join()
功能:将字符串数组,按照指定字符串进行连接
传入:间隔连接符、需连接的数组
返回:连接后的新字符串
String[] array = {
"AE", "AD", "AB" };
String result01 = String.join("#", array);
System.out.println(result01);
21.StringJoiner
功能:进行字符串的连接
StringJoiner joiner = new StringJoiner(",");
参数表示:连接数组元素间的符号格式
StringJoiner joiner = new StringJoiner(",","{","}");
参数表示:参数1:连接数组元素的间隔符
参数2:所连接字符串的前缀符
参数3:所连接字符串的后缀符
String[] array = {
"AE", "AD", "AB" };
//用法1:
// StringJoiner joiner = new StringJoiner(","); // 仅使用分隔符
//用法2:
StringJoiner joiner = new StringJoiner(",","{","}"); //分隔符,前缀,后缀
for(String s : array) {
joiner.add(s); //添加字符串
}
String result02 = joiner.toString();
System.out.println(result02);