1.String类
1.1String类概述
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
1.2String类的特点
- 字符串不可变,它们的值在创建后不能被更改
- 虽然 String 的值是不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
1.3String类的构造方法
- 常用的构造方法
方法名说明public String()创建一个空白字符串对象,不含有任何内容public String(char[] chs)根据字符数组的内容,来创建字符串对象public String(byte[] bys)根据字节数组的内容,来创建字符串对象String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
- 示例代码
1.4创建字符串对象两种方式的区别
- 通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
- 直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
1.5字符串的比较
1.5.1==号的作用
- 比较基本数据类型:比较的是具体的值
- 比较引用数据类型:比较的是对象地址值
1.5.2equals方法的作用
- 方法介绍
- 示例代码
1.6用户登录案例
1.6.1案例需求
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
1.6.2代码实现
1.7遍历字符串案例
1.7.1案例需求
键盘录入一个字符串,使用程序实现在控制台遍历该字符串
1.7.2直接遍历字符串
1.8统计字符次数案例
1.8.1案例需求
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
1.8.2代码实现
1.9字符串拼接案例
1.9.1案例需求
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
1.9.2代码实现
1.10字符串反转案例
1.10.1案例需求
定义一个方法,实现字符串反转。键盘录入一个java基础字符解释字符串,调用该方法后,在控制台输出结果
例如,键盘录入 abc,输出结果 cba
1.10.2代码实现
1.11 金额转换
1.11.1 案例需求
把2135变成:零佰零拾零万贰仟壹佰叁拾伍元
把789变成:零佰零拾零万零仟柒佰捌拾玖元
1.11.2 代码实现
1.12 手机号屏蔽
需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
最终效果为:
代码实现:
1.13 敏感词替换
需求1:键盘录入一个 字符串,如果字符串中包含(***),则使用*替换
需求2:如果要替换的敏感词比较多怎么办?
1.14 身份证信息查看
身份证的每一位都是有固定的含义:
- 1、2位:省份
- 3、4位:城市
- 5、6位:区县
- 7-14位:出生年、月、日
- 15、16位:所在地派出所
- 17位:性别(奇数男性,偶数女性)
- 18位:个人信息码(随机产生)
要求打印内容方式如下:
人物信息为:
出生年月日:XXXX年X月X日
性别为:男/女
2.StringBuilder
StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。
当我们在拼接字符串和反转字符串的时候会使用到
2.1 基本使用
2.2 链式编程
2.3 练习1:对称字符串
需求:
键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
代码示例:
2.4 练习2:拼接字符串
需求:定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回。
调用该方法,并在控制台输出结果。
例如:数组为int[] arr = {1,2,3};
执行方法后的输出结果为:[1, 2, 3]
代码示例:
3. StringJoiner
- StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
- 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。
- JDK8出现的
基本使用:
关于字符串的小扩展:
- 字符串存储的内存原理
String s = “abc”;直接赋值
特点:
此时字符串abc是存在字符串常量池中的。
先检查字符串常量池中有没有字符串abc,如果有,不会创建新的,而是直接复用。如果没有abc,才会创建一个新的。
所以,直接赋值的方式,代码简单,而且节约内存。
- new出来的字符串
看到new关键字,一定是在堆里面开辟了一个小空间。
String s1 = new String(“abc”);
String s2 = “abc”;
s1记录的是new出来的,在堆里面的地址值。
s2是直接赋值的,所以记录的是字符串常量池中的地址值。
- ==号比较的到底是什么?
如果比较的是基本数据类型:比的是具体的数值是否相等。
如果比较的是引用数据类型:比的是地址值是否相等。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/3923.html