Java字符串
一.API
应用程序接口,简单来说API就是别人已经写好的东西,我们不用自己再写一遍,直接使用即可
Java API:指JDK中提供的各种功能的java类,这些类将底层的实现封装起来,不用考虑这些类是怎么实现的,直接学习这些类的使用即可
二.String
概述:java.lang.String类代表字符串,Java程序中的所有字符串文字都为此类的对象
注意:字符串的内容不会发生改变,它的对象在创建后不能被更改
String对象的创建:
1.直接赋值
String name = "";2.new方法创建
| 构造方法 | 说明 |
| public String() | 创建空白字符串,不含任何内容 |
| public String(String original) | 根据传入的字符串,创建字符串对象 |
| public String(char[] chs) | 根据字符数组,创建字符串对象 |
| public String(byte[] chs) | 根据字节数组,创建字符串对象 |
字符数组的使用场景:需要修改字符串内容
字节数组的使用场景:以后在网络中传输的数据都是字节信息,一般要把字节信息进行转换,转换成字符串,此时用到此构造
Java的常用方法(比较):
==号比较的到底是什么:基本数据类型比较数据值;引用数据类型比较地址值
字符串的比较方法:
| 构造方法 | 说明 |
| boolean equals(要比较的字符串) | 完全一样的结果才是true,否则为false |
| boolean equalsIgnoreCase(要比较的字符串) | 忽略大小写的比较 |
字符串的遍历:
| 构造方法 | 说明 |
| public char charAt(int index) | 根据索引返回字符 |
| public int length() | 返回此字符串的长度 |
字符串的截取:
| 构造方法 | 说明 |
| String substring(int beginIndex,int endIndex) | 包头不包尾,包左不包右;只有返回值才是截取的小串 |
| String substring(int beginIndex) | 截取到末尾 |
字符串的替换:
| 构造方法 | 说明 |
| String replace(旧值,新值) | 只有返回值才是替换后的结果 |
三.StringBuilder
概述:StringBuilder可以看作是一个容器,创建后里面的内容是可变的
作用:提高字符串的操作效率
StringBuilder的构造方法:
| 方法名 | 说明 |
| public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
| public StringBuilder(String str) | 根据字符串的内容,创建可变字符串对象 |
StringBuilder的常用方法:
| 方法名 | 说明 |
| public StringBuilder append(任意类型) | 添加数据并返回对象本身 |
| public StringBuilder reverse() | 反转容器中的内容 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 通过toString()可以实现吧StringBuilder转换为String |
链式编程:在调用一个方法时,不需要用变量接收结果,可以继续调用其他的方法
四.StringJoiner
概述:StringJoiner和StringBuilder一样,也可以看作是一个容器,创建后里面的内容是可变的
作用:提高字符串的操作效率,而且代码的编写十分简洁
JDK8之后出现
StringJoiner的构造方法:
| 方法名 | 说明 |
| public StringJoiner(间隔符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号 |
| public StringJoiner(间隔符号,开始符号,结束符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号 |
StringJoiner的成员方法:
| 方法名 | 说明 |
| public StringJoiner add(添加的内容) | 添加数据,并返回对象本身 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 返回一个字符串(该字符串就是拼接后的结果) |
五.字符串原理
1.字符串存储的内存原理:
直接赋值会服用字符串常量池中的
new出来的不会复用,而是开辟一个新的空间
2.==号比较的到底是什么:
基本数据类型比较数据值
引用数据类型比较地址值
3.字符串拼接的底层原理:
如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果, 会复用串池中的字符串
如果有变量参与,会创建新的字符串,浪费内存
4.StringBuilder提高效率原理:
所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存
5.StringBuilder源码分析:
默认创建一个长度为16的字节数组
添加的内容长度小于16,直接存储
添加的内容大于16会扩容(原来容量*2+2)
如果扩容之后还不够,已实际长度为准
