字符串相关知识点
1.Java的API和API帮助文档
- 用于查找各种方法,类和函数的使用
Java的API文档链接:https://pan.baidu.com/s/1TXh6rBAFsCfnTS3CW8fvsg
提取码:dvhs
下载之后点击第一个(有问号这个)
点击显示
点击索引–>>输入arrays–>>点击显示–即出现arrays有关的方法
2.创建String的两种方式
- 通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同 - 直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
代码:
结果:
3.字符串内存原理
- 字符串存储的内存原理
String s = “abc”;直接赋值
特点:
此时字符串abc是存在字符串常量池中的。
先检查字符串常量池中有没有字符串abc,如果有,不会创建新的,而是直接复用。如果没有abc,才会创建一个新的。
所以,直接赋值的方式,代码简单,而且节约内存。
4.“==”比较的是什么
1.如果比较的是基本数据类型则比较的的是数据值
2.如果比较的是引用数据类型则比较的是地址值
- 基本数据类型 :整数类型, 浮点类型, 布尔类型 ,字符类型 。
- 引用数据类型 :除了基本类型就是引用数据类型。
字符串比较:
3.字符串比较 - boolean equals方法(要比较的字符串) //完全一样结果才是true,否则为false
- boolean equalslgnoreCase(要比较的字符串) //忽略大小的比较
例:
public class demo {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1 = new String("abc");
String s2 = "Abc";
String s3 = "Abc";
//2.==号比较
//基本数据类型:比的是数据值
//引用数据类型:比的是地址值
System.out.println(s3 == s2);//结果为true
System.out.println(s3 == s2);//结果为false
//3.比较字符串对象中的内容是否相等
boolean result1 = s1.equals(s2);
System.out.println(result1);//false
//4.比较字符串对象中的内容是否相等,忽略大小写
//1 一 壹 这不行
//忽略大小写只能是英文状态下的a A
boolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2);//true
}
}
5.字符串截取与敏感值替换
1.字符串截取
- String substring(int beginindex ,int endindex) //截取
注意:包头不包尾,包左不包右 只有返回值才是截取的小串 - String substring(int beginIndex) //截取到末尾
2.敏感值替换
- String replace(旧值,新值) //替换
注意:只有返回值才是替换后的结果
实例:
public class demo {
public static void main(String[] args) {
//1.定义一个字符串记录身份证号码
String str = "321281202001011234";
//2.获取出生年月日
String str2 = str.substring(1, 3);
String str3 = str.substring(6); //字符串索引6开始到末尾
System.out.println(str2);
System.out.println(str3);
//1.获取到说的话
String talk = "你玩的真好,以后不要再玩了,TMD";
//2.把里面的敏感词TMD替换为***
String result = talk.replace("TMD", "***");
//3.打印结果
System.out.println(result);
}
}
运行结果:
6.StringBuilder字符串容器
StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。
当我们在拼接字符串和反转字符串的时候会使用到
6.1 基本使用
public class StringBuilderDemo3 {
public static void main(String[] args) {
//1.创建对象
StringBuilder sb = new StringBuilder("abc");
//2.添加元素
/*sb.append(1);
sb.append(2.3);
sb.append(true);*/
//反转
sb.reverse();
//获取长度
int len = sb.length();
System.out.println(len);
//打印
//普及:
//因为StringBuilder是Java已经写好的类
//java在底层对他做了一些特殊处理。
//打印对象不是地址值而是属性值。
System.out.println(sb);
}
}
6.2 链式编程
public class StringBuilderDemo4 {
public static void main(String[] args) {
//1.创建对象
StringBuilder sb = new StringBuilder();
//2.添加字符串
sb.append("aaa").append("bbb").append("ccc").append("ddd");
System.out.println(sb);//aaabbbcccddd
//3.再把StringBuilder变回字符串
String str = sb.toString();
System.out.println(str);//aaabbbcccddd
}
}
7. StringJoiner
- StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
- 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。
- JDK8出现的
基本使用:
//1.创建一个对象,并指定中间的间隔符号
StringJoiner sj = new StringJoiner("---");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
//3.打印结果
System.out.println(sj);//aaa---bbb---ccc
//1.创建对象
StringJoiner sj = new StringJoiner(", ","[","]");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
int len = sj.length();
System.out.println(len);//15
//3.打印
System.out.println(sj);//[aaa, bbb, ccc]
String str = sj.toString();
System.out.println(str);//[aaa, bbb, ccc]