1.String概述:
java.lang.String类代表字符串,java程序中的所有字符串文字(例如”abc”)都为此类的对象String是java定义好的一个类,定义在java.lang包中,所以使用的时候不需要导包
2.String注意点:
字符串的内容是不会发生改变的,它的对象在创建后不能被更改
3.创建String对象的两种方式
1. 直接赋值 ——- String name = “IT梦”;2. new(构造方法)
代码演示:
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);
}
}
String的内存模型:
1.直接赋值:
总结:当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在不存在:创建新的存在:复用
2.new
字符串比较:
在比较开始之前,我们先考虑一个问题 —— == 号比的到底是什么?基本数据类型:比较的是具体的数据值引用数据类型:比较的是地址值
代码演示:
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");
}
}
}
字符串内容的比较:
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);
}
}
遍历字符串:
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位:性别(奇数男性,偶数女性)
最终效果:
答案:
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);
}
}
拓展:
链式编程:当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
代码演示:
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);
}
}
练习:
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);
}
}
拓展:
字符串拼接的底层原理:
1.拼接过程中没有变量参与:
2.拼接过程中有变量参与(在内存中创建了很多对象,浪费空间,速度也非常慢):
结论:如果有很多字符串变量拼接,不要直接用+,在底层会创建多个对象,浪费时间,浪费性能
3.StringBuilder原理图:
4.StringBuilder源码分析:
默认创建一个长度为16的字节数组添加的内容长度小于16,直接存添加的内容长度大于16会扩容(原来的容量*2+2)如果扩容之后还不够,以实际长度为准
小结:
1.如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串2.如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存
综合练习:
1.转换罗马数字
键盘录入一个字符串(长度小于等于9且只能是数字),将内容变成罗马数字
注意:罗马数字里面是没有0的,如果键盘录入的数字包含0,可以变成” “(长度为0的字符串)
答案:
2.调整字符串
给定两个字符串,A和B,A的旋转操作就是将A最左边的字符移动到最右边例:若A等于”abcde”,在旋转一次后结果就是”bceda”如果在若干次调整操作之后,A能变成B,那么返回true,否则返回false
答案:
温馨提示:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。