String类
字符串 对象 创建方式 | ||
---|---|---|
构造方法1 | public String() | 创建一个空白字符串,不含有任何内容。 |
构造方法2 | public String(char[] array) | 根据字符数组的内容,来创建对应的字符串。 |
构造方法3 | public String(byte[] array) | 根据字节数组的内容,来创建对应的字符串。 |
直接创建 | String str = "Hello"; //右边直接用双引号 |
注意:直接写上双引号,就是字符串对象。程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)
字符串 进行 + 操作是 拼接作用 生成的是另一个对象(注意转换)
public static void main(String[] args) {
// 使用空参构造
String str1 = new String(); // 小括号留空,说明字符串什么内容都没有。
System.out.println("第1个字符串:" + str1);
// 根据字符数组创建字符串
char[] charArray = { 'A', 'B', 'C' };
String str2 = new String(charArray);
System.out.println("第2个字符串:" + str2);
// 根据字节数组创建字符串
byte[] byteArray = { 97, 98, 99 };
String str3 = new String(byteArray);
System.out.println("第3个字符串:" + str3);
// 直接创建
String str4 = "Hello";
System.out.println("第4个字符串:" + str4);
}
字符串常量池(堆内存):程序当中直接写上的双引号字符串,就在字符串常量池中。
注意:
String str = "aoteman"语句会先检查字符串常量池是否存放"aoteman"这个字符串对象,如果没有,那么就在字符串常量池中创建这个字符串对象,如果存在直接返回该字符串的内存地址值。
String str = new String("aoteman") 语句会创建两个对象。首先检查字符串常量池中存不存在aoteman这个字符串对象,不存在就会创建,存在就返回内存地址值。创建了出来之后,new String这个语句就会在堆内存中开辟一个字符串对象。
总共两个对象。
对于基本类型来说,== 是进行数值的比较。
对于引用类型来说,== 是进行【地址值】比较。 用equals方法比较内容
public class Demo02StringPool {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {'a', 'b', 'c'};
String str3 = new String(charArray);
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // false
}
}
常用方法 | String str= "hello,world!" | |
---|---|---|
获取方法 | str.length() | 获取字符串的长度 |
str.charAt(索引值) | 获取特定位置的字符 | |
str.indexOf(字符串中的某个字符) | 获取特定字符的第一位置 | |
str.lastIndexOf(字符串中的某个字符) | 获取字符最后的位置 | |
判断方法 | str.endsWith(字符) | 是否以指定字符结束 |
str.isEmpty() | 是否长度为0 | |
str.contains(字符串) | 是否包含指定序列 | |
str.equals(Object anObject) | 另一对象内容是否相等 | |
str.equalsIgnoreCase(String anotherString) | 忽略大小写是否相等 | |
转换方法(数组转换) | String(char[] value) | 将字符数组转换为字符串 |
String(char[] value, int offset, int count) |
| |
static String valueOf(char[] data) |
| |
static String valueOf(char[] data, int offset, int count) |
| |
str.toCharArray() | 将字符串转换为字符数组 | |
其他方法 | str.replace(char oldChar, char newChar) | 替换 |
String[] split(str.regex) | 切割 | |
如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠) | ||
str.substring(int beginIndex) | 截取 | |
str.substring(int beginIndex, int endIndex) | 截取字串 | |
str.toUpperCase() | 转大写 | |
str.toLowerCase() | 转小写 | |
str.trim() | 去除空格 | |
对String对象的任何改变都不影响到原对象,任何change操作只会生成新的对象 |
基本类型转换String | |
1.基本类型值与空字符串直接连接 num+ " " | |
2.包装类的静态方法toString(参数),不是Object类的toString() 重载, static String toString(int i) 返回一个表示指定整数的 String 对象 | |
3.String类的静态方法valueOf(参数) , static String valueOf(int i) 返回 int 参数的字符串表示形式 | |
String转换成对应的基本类型 : 使用包装类的静态方法parseXXX("字符串") | |
byte parseByte(String s) | 将字符串参数转换为对应的byte基本类型 |
short parseShort(String s) | 将字符串参数转换为对应的short基本类型 |
int parseInt(String s) | 将字符串参数转换为对应的int基本类型 |
long parseLong(String s) | 将字符串参数转换为对应的long基本类型 |
float parseFloat(String s) | 将字符串参数转换为对应的float基本类型 |
double parseDouble(String s) | 将字符串参数转换为对应的double基本类型 |
boolean parseBoolean(String s) | 将字符串参数转换为对应的boolean基本类型 |
//基本类型->字符串(String)
int i1 = 100;
String s1 = i1+"";
System.out.println(s1+200);//100200
String s2 = Integer.toString(100);
System.out.println(s2+200);//100200
String s3 = String.valueOf(100);
System.out.println(s3+200);//100200
public class Parse {
public static void main(String[] args) {
int num = Integer.parseInt("100");
//自动拆装箱
}
}
StringBuffer类
String对象是不可变的,改变字符串对象要使用可变字符串缓冲区类StringBuffer
方法:
String str= "hello,world!"
StringBuffer SB = new StringBuffer(str);
----------------------------------------------------------------------------------------------------------------
添加方法
| SB.append(true); | 添加true字符 |
SB.append('a'); | 添加a字符 | |
SB.append(97).append(34.0).append(new char[]{'o','o'}); | 链式添加 | |
SB.insert( 索引值, "内容" ); | 在索引值插入内容 | |
查看方法
| SB.toString() | 返回这个容器的字符串 |
SB.indexOf(字符) | 返回第一次出现的字符串的索引。 | |
SB.substring(int start) | 从开始的位置开始截取字符串 | |
修改方法
| SB.replace(int start int endString 内容) | 替换开始--结束--替换内容 |
SB.setCharAt(索引值 字符) | 指定索引位置替换一个字符 | |
删除方法
| SB.delete(开始,结束) | 删除 |
SB.deleteCharAt(位置) | 删除该位置内容 | |
反序方法 | SB.reverse() | 反序 |
StringBuilder类
对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间---->StringBuilder解决
StringBuilder是个字符串的缓冲区,会自动维护数组的扩容,可以装很多字符串,并能够对其中的字符串进行各种操作。
publicStringBuilder( ) | 构造一个空的StringBuilder容器 |
publicStringBuilder(String str) | 构造一个StringBuilder容器,并将字符串添加进去 |
public StringBuilder append(str) | 添加任意类型数据的字符串形式,并返回当前对象自身 |
public String toString() | 将当前StringBuilder对象转换为String对象 |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
StringBuffer 与 StringBuilder 区别
相同点:都是字符串缓冲类, 底层都是维护一个字符数组用于存储数据
不同点:
StringBuffer 是线程安全的,操作效率低。
StringBuilder 是线程非安全的,操作效率高。
推荐使用:StringBuilder