String
定义在java.lang包中的类,用来处理字符串 ,该类的字符串值的不可以被更改.
1.直接赋值创建字符串.
2.创建对象传参或赋值.
public class Test {
public static void main(String[] args) {
String a ="jsaa";
//系统会检查字符串池中是否存在当前字符串,如果存在直接调用串池的
String s ="jsaa";
//定义字符数组,创建字符串对象,调用有参构造,传入字符数组为参数,此时在堆中开辟内存,
//在ASCll码表中查询数字对应的字符,生成字符串存入堆中,s1记录堆的地址值
char[] c ={97,98};
String s1 = new String(c);
System.out.println(s1);//ab
}
}
注意:每次new创建对象时都会在堆中开辟内存,所以一般建议直接赋值创建字符串更节约内存.
常用方法
char charAt(index); 返回该索引处字符的值;
String s ="jsaa";
System.out.println(s.charAt(0));//j
boolean equals(); 比较字符串内容是否相同,相同返回true.
String s ="jsaa";
String s2="jkll";
System.out.println(s.equals(s2));//false
boolean equalslgnoreCase(); 忽略大小写比较
String s ="jsaa";
String s2="JSAA";
System.out.println(s.equalsIgnoreCase(s2));//ture
String substring (int beginIndex);截取函数, 从开始索引截取到字符串末尾,返回被截取后的字符串
String substring (int beginIndex,int endIndex);包左不包右,从开始索引截取到endIndex-1;
String s ="jsaa";
String s2="JSAA";
System.out.println(s.substring(1, 2));//j
System.out.println(s2.substring(1));//SAA
String replace(oldChar,newChar); 替换字符串中的字符
String s ="jsaa";
System.out.println(s.replace('j', 's'));//ssaa
System.out.println(s.replace('a', 'l'));//jsll
StringBuilder
提高字符串操作效率的类,可以看做一个大小可变的容器,该类里的字符串内容可变
常用方法
String append(); 添加数据,返回对象本身
StringBuilder sb = new StringBuilder();
//sb 只是 StringBuilder类型的容器的对象,不是字符串,直接打印sb,系统底层会自动调用该类的toString(),将其转化成字符串类型.
sb.append("kladk");
System.out.println(sb);
//也可以自己调用
String s = sb.toString();
System.out.println(s);
String reverse();反转容器里的内容
StringBuilder sb = new StringBuilder();
sb.append("kladk");
System.out.println(sb.reverse());//kdalk
int length(); 返回字符出现个数
String toString(); 转换成字符串并返回
StringJoiner
jdk8出的操作字符串的类,同样看做容器,可拼接字符串
构造方法:
public StringJoiner(delimiter:中间间隔符号 ,prefix:开始符号, suffix:末尾的符号),
没有空参构造,如果字符串拼接时没有要拼接的符号,也要输入" "号占位,中间可以不加符号.
//delimiter:中间间隔符号 ,prefix:开始符号, suffix:末尾的符号
StringJoiner sj = new StringJoiner("-",",","?");
System.out.println(sj.add("kjlksd").add("dss"));//,kjlksd-dss?
成员方法
add();添加字符串
length();返回字符出现个数,包括拼接的符号.
toString();转化成字符串
关于拼接字符串
1,一般连续调用StringBuilder类的append方法拼接,但要指定间隔符号这种情况,一般实例化StringJoiner类的对象添加比较方便.
2,如果 有变量的拼接,系统底层会创建StringBuilder类的对象,用append()添加完成拼接,这样比较浪费内存.这里的s变量记录的是堆中地址值;
没有变量则会复用串池中的字符串,然后直接相加,系统编译后就是拼接结果.
String c = "jkl";
String s = "jda"+c;
System.out.println(s);//jdajkl
//较省内存
String a = "jkl"+"jda";