基于Java的String字符串基本用法总结

在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);

猜你喜欢

转载自blog.csdn.net/weixin_51529267/article/details/112383973