当前位置:首页学习笔记Java笔记3.1 String字符串

3.1 String字符串

1.String概述:

java.lang.String类代表字符串,java程序中的所有字符串文字(例如”abc”)都为此类的对象
String是java定义好的一个类,定义在java.lang包中,所以使用的时候不需要导包

2.String注意点:

字符串的内容是不会发生改变的,它的对象在创建后不能被更改

3.创建String对象的两种方式

1. 直接赋值 ——- String name = “IT梦”;
2. new(构造方法)

3.1 String字符串

代码演示:

public class IT梦 {  
	public static void main(String[] args) {  
		//直接赋值  
		String s1 = "IT梦";  
		//使用new的方式获取字符串的对象  
		//空参构造  
		String s2 = new String();  
		System.out.println("IT" + s2 + "梦");  
		//传递一个字符串,根据传递的字符串内容创建一个新的字符串  
		String s3 = new String("abc");  
		System.out.println(s3);  
		//传递一个字符数组,根据字符数组的内容创建一个新的字符串  
		char[] arr = {'a','b','c','d'};  
		String s4 = new String(arr);  
		System.out.println(s4);  
		//传递一个字节数组,根据字节数组的内容创建一个新的字符串  
		byte[] arr1 = {97,98,99,100};  
		String s5 = new String(arr1);  
		System.out.println(s5);  
	}  
}

3.1 String字符串

String的内存模型:

1.直接赋值:

3.1 String字符串

总结:当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在
不存在:创建新的
存在:复用

2.new

3.1 String字符串

字符串比较:

在比较开始之前,我们先考虑一个问题 ——  == 号比的到底是什么?
基本数据类型:比较的是具体的数据值
引用数据类型:比较的是地址值

代码演示:

public class IT梦 {  
	public static void main(String[] args) {  
		String s1 = "abc";  
		String s2 = "abc";  
		if(s1 == s2){  
			System.out.println("true");  
		}else {  
			System.out.println("false");  
		}  
		String s3 = "abcd";  
		String s4 = new String("abcd");  
		if(s3 == s4){  
			System.out.println("true");  
		}else {  
			System.out.println("false");  
		}  
	}  
}

3.1 String字符串

字符串内容的比较:

1. boolean equals(要比较的字符串)                完全一样结果为true,否则为false(不忽略大小写)
2. boolean equalsIgnoreCase(要比较的字符串)            一样为true,否则为false(忽略大小写)

代码演示:

public class IT梦 {  
	public static void main(String[] args) {  
		String s1 = "abc";  
		String s2 = "ABC";  
		boolean flag1 = s1.equals(s2);  
		boolean flag2 = s1.equalsIgnoreCase(s2);  
		System.out.println(flag1);  
		System.out.println(flag2);  
	}  
}

3.1 String字符串

遍历字符串:

1. public char charAt(int index):根据索引返回字符
2. public int length():返回此字符串的长度
3. 字符串的长度:字符串对象.length()

截取:

1.String substring(int beginIndex,int endIndex):从第一个索引开始截取到第二个索引结束
注意点:包头不包尾,包左不包右
只有返回值才是截取的字符串,原先的字符串不会改变
2.String substring(beginIndex):从索引开始截取到末尾

替换:

1.String replace(旧值,新值):将旧值替换成新值
注意点:只有返回值是替换后的结果,原先的字符串不会改变

练习:

1.用户登录:

需求:已知正确的用户名和密码,请用程序实现模拟用户登录
总共给三次机会,登录之后,给出相应的提示

答案:

2.统计字符个数:

键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符分别有几个(不考虑其他字符)

答案:

3.拼接字符串

定义一个方法,把int数组的数组按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果
例:数组为int [] arr = {1,2,3};
执行方法后的输出结果为:[1,2,3,]

答案:

4.字符串反转

定义一个方法,实现字符串反转,键盘录入一个字符串,调用该方法后,在控制台输出结果
例:键盘录入abc,输出结果cba

答案:

5.金额转换

键盘录入一个七位数的金额,将他改成中文大写的格式
例:2018元——–>零佰零拾零万贰仟零佰壹拾捌元

答案:

6.手机号屏蔽

将手机号15898648251变成158****8251

答案:

7.身份证信息查看

身份证7-14位:出生年,月,日
身份证第17位:性别(奇数男性,偶数女性)

最终效果:

3.1 String字符串

答案:

7.敏感词替换

将脏话替换成***

答案:

 

StringBuilder:

StringBuilder可以看成是一个容器,创建之后里面的内容是可变的
作用:提高字符串的操作效率

StringBuilder构造方法:

public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象

StringBuilder常用方法:

public StringBuilder append(任意类型):添加数据,并返回对象本身
public StringBuilder reverse():反转容器中的内容
public int length():返回长度(字符出现的个数)
public String toString():把StringBuilder类型转换为String类型,转换完之后就可以调用String的方法

StringBuilder的使用场景:

1.字符串的拼接
2.字符串的反转

普及:

因为StringBuilder是java已经写好的类,java在底层对他做了一些特殊处理,所以在打印对象时打印的不是地址值而是属性值

代码演示:

public class IT梦 {  
	public static void main(String[] args) {  
		//创建对象  
		StringBuilder sb = new StringBuilder("abc");  
		System.out.println(sb);  
  
		//添加内容  
		sb.append("IT梦");  
		System.out.println(sb);  
  
		//反转内容  
		sb.reverse();  
		System.out.println(sb);  
  
		//返回长度  
		int i = sb.length();  
		System.out.println(i);  
  
		//转换为字符串  
		String str = sb.toString();  
		System.out.println(str);  
	}  
}

3.1 String字符串

拓展:

链式编程:当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法

代码演示:

public class IT梦 {  
	public static void main(String[] args) {  
		StringBuilder sb = new StringBuilder("IT梦");
		//链式编程  
		String str = sb.append(2023).reverse().toString();  
		System.out.println(str);  
	}  
}

3.1 String字符串

练习:

1.对称字符串:

键盘接收一个字符串, 程序判断该字符串是否是对称字符串,并在控制台打印是或不是
对称字符串:123321,111
非对称字符串:123123

答案:

 

2.拼接字符串

定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果
例:数组为int[] arr = {1,2,3};
执行方法后的输出结果为:[1,2,3]

答案:

StringJoiner:

1.StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的
2.作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用
3.JDK8出现的

StringJoiner的构造方法:

public StringJoiner(间隔符号):创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号):创建一个StringJoiner对象,指定拼接时的间隔符号,开始符号,结束符号

StringJoiner的成员方法:

public StringJoiner add(添加的内容):添加数据,并返回对象本身
public int length():返回长度(字符出现的个数)
public String toString():返回一个字符串(该字符串就是拼接后的结果)

代码演示:

import java.util.StringJoiner;  
  
public class IT梦 {  
	public static void main(String[] args) {  
		StringJoiner sj = new StringJoiner("---");  
		String str = sj.add("a").add("b").add("c").toString();  
		System.out.println(str);  
		StringJoiner sj1 = new StringJoiner(", ","[","]");  
		String str1 = sj1.add("a").add("b").add("c").toString();  
		System.out.println(str1);  
		int len = sj1.length();  
		System.out.println(len);  
	}  
}

3.1 String字符串

拓展:

字符串拼接的底层原理:

1.拼接过程中没有变量参与:

3.1 String字符串

2.拼接过程中有变量参与(在内存中创建了很多对象,浪费空间,速度也非常慢):

3.1 String字符串

结论:如果有很多字符串变量拼接,不要直接用+,在底层会创建多个对象,浪费时间,浪费性能

3.StringBuilder原理图:

3.1 String字符串

4.StringBuilder源码分析:

默认创建一个长度为16的字节数组
添加的内容长度小于16,直接存
添加的内容长度大于16会扩容(原来的容量*2+2)
如果扩容之后还不够,以实际长度为准

小结:

1.如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串
2.如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存

综合练习:

1.转换罗马数字

键盘录入一个字符串(长度小于等于9且只能是数字),将内容变成罗马数字
注意:罗马数字里面是没有0的,如果键盘录入的数字包含0,可以变成” “(长度为0的字符串)
3.1 String字符串

答案:

2.调整字符串

给定两个字符串,A和B,A的旋转操作就是将A最左边的字符移动到最右边
例:若A等于”abcde”,在旋转一次后结果就是”bceda”
如果在若干次调整操作之后,A能变成B,那么返回true,否则返回false

答案:

温馨提示:

文章标题:3.1 String字符串

文章链接:https://www.cutrui.cn/2884.html

更新时间:2023年07月23日

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Java笔记学习笔记

3.0 API

2023-7-9 10:17:55

Java笔记学习笔记

3.2 ArrayList集合

2023-7-23 13:46:04

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

你有新的私信

请务必要查看您的私信哟~~