字符串
- 常用方法
- 练习
- StringBuilder类
- StringBuffer区别
String
类代表字符串
,Java程序中所有字符串字面值
(“abc”)都作为此类的实例实现.
字符串特点
- 字符串的
内容永不可变
- 因为字符串不可改变,所以字符串可以
共享使用
- 字符串效果上相当于
char[ ]
字符数组,底层是bytes[ ]
字节数组.
创建字符串的方式public String()
创建一个空白字符串""
,不含有任何内容public String(char[] array)
根据字符数组
内容,来创建对应的字符串public String(bytes[] arrar)
根据字节数组
内容,来创建对应的字符串直接创建
String str=“A”;直接写上双引号,就是字符串对象
字符串常量池
程序当中直接写上的双引号字符串,就在字符串常量池
中
String str1="abc";
String str2="abc";
char[] str3={'a','b','c'};
String str3=new String(char);//new出的字符串不在常量池
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
System.out.println(str2==str3);//false
==
基本类型
进行数值
的比较
引用类型
进行地址值
的比较
常用方法
public boolean equals(Object obj)
只有参数是一个字符串并且内容相同才返回true
推荐"abc".equals(str)
写法public boolean equalsIgnoreCase(String str)
忽略大小写,进行内容比较
String str=null;
System.out.println("abc".equals(str));//false
System.out.println(str.equals("abc"));//报错,空指针异常NullPointerException
public int length()
获取字符串当中含有的字符个数public String concat(String str)
将当前字符串和参数字符串拼接成为新字符串public char charAt(int index)
获取指定索引位置的单个字符(索引从0开始
)public int indexOf(String str)
查找参数字符串在本字符串中首次出现的索引位置,如果没有返回-1
字符串截取方法
public String subString(int index)
截取从参数位置一直到字符串末尾,返回新的字符串public String substring(int begin,int end)
截取从begin开始,一直到end结束,中间的字符串左闭右开
字符串转换
public char[] toCharArray()
将当前字符串拆分为字符数组
作为返回值public byte[] getBytes()
获得当前字符串底层的字节数组
public String replace(CharSequence oldone,CharSequence newone)
将老字符串替换为新字符串
字符串分割方法
public String[] split(String regex)
按照参数的规则,将字符串分割为若干部分
参数实质为正则表达式
,按 . 切分时,"\\."
练习
需求 定义一个方法,把数组{1,2,3}按照格式拼接成字符串,格式如下[word1#word2#word3]
public static void main(String[] args) {
int[] array={1,2,3};
String str="【";
for (int i = 0; i < array.length; i++) {
if (i==array.length-1){
str+="word"+array[i]+"】";
}else {
str+="word"+array[i]+"#";
}
}
System.out.println(str);
}
StringBuilder类
字符串
底层是常量,创建之后不能改变,底层是一个被final
修饰的数组,不能改变,是一个常量
private final byte[] value
进行字符串相加,内存中会有多个字符串,占用空间多
,效率低下
字符串缓冲区
可以提高字符串的操作效率(看做一个长度可以变换的字符串),底层也是一个数组,但是没有被final修饰,可以改变长度
byte[] value=new byte[16];
StringBuilder
在内存中始终是一个数组,占用内存少,效率高,
如果超出了StringBuilder
的容量,会自动扩容
.
StringBulider常用方法
StringBuilder()
创建一个空的字符串缓冲区对象
StringBuilder(String s);
根据传入的内容创建一个字符串缓冲区对象
public StringBuilder append()
添加任意类型的字符串形式,并返回当前对象本身.参数
可以为任意的数据类型
//创建StringBuilder对象
StringBuilder bu1=new StringBuilder();
//使用append方法往StringBuilder中添加数据
StringBuilder bu2=bu1.append("abc");
注意
bu1与bu2为同一个对象,使用append方法无需返回值
//Stringbuilder类
public StringBuilder append(String str){
super.append(str);
return this;
}
public String toString()
将当前StringBuilder
对象转换为String
对象
StringBuilder reverse()
反转内容
StringBuffer区别
StringBuffer
在方法前加了一个synchronized
修饰,起到同步
的作用,可以在多线程
环境使用,为此付出的代价就是降低了执行效率。因此,如果在多线程环境可以使用StringBuffer
进行字符串连接操作,单线程环境使用StringBuilde
r,它的效率更高
。