字符串
String概述
String,StringBuilder,StringJonier,StringBuffer,Pattern,Matcher
1.String是Java已经定义好的一个类,定义在java的包中,使用的时候不需要导包
2.Java程序中的所有字符串文字,比如:"abcde",都叫做此类的对象
3.字符串不可变,它们的值在创建后不能被更改
创建String对象的两种方式
1.直接赋值 比如:String name="Martyn";
2.new 构造方法 说明
pulbic String() 创建空白字符串,不含任何内容
public String(String original) 根据传入的字符串,创建字符串对象
public String(char[ ] chs) 根据字符数组,创建字符串对象
public String(byte[ ] chs) 根据字节数组,创建字符对象
public class stringDemo1 {
public static void main(String[] args) {
//字符串的常见操作
//1.直接赋值
String s1 = "Martyn and i are total buds!!!";
System.out.println(s1);
//2.空参构造,可以获取一个空白字符串的对象 ""
String s2 = new String();
System.out.println("@" + s2 + "!");
//3.abc----Qbc char
//传递一个字符串数组,根据字符数组的内容再创建一个新的字符串对象
char[] chs = {'a', 'b', 'c', 'd'};
String s3 = new String(chs);
System.out.println(chs);
//传递一份字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:以后在网中传输的数据其实都是自己信息
//我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造
//问题:我这里为什么会是地址值呢?
byte[] bytes = {97, 98, 99, 100};
String s4 = new String(bytes);
System.out.println(s4);
}
}
==到底比的是什么?
基本数据类型比较的是数据值 引用数据类型比较的是地址值
字符串比较
boolean equals方法(要比较的字符串) 完全一样的结果才是true,否则为false
boolean equalsgnoreCase(要比较的字符串) 忽略大小写的比较
public class stringDemo2 {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1 = new String("abc");
String s2 = "Abc";
//2.==号比较
//基本数据类型:比的是数据值
//引用数据类型:比的是地址值
System.out.println(s1 == s2);//false
//3.比较字符串对象中的内容是否相等
boolean result = s1.equals(s2);
System.out.println(result);//false
//4.比较字符串对象中的内容是否相等,忽略大小写
boolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2);//ture
//1 一 壹
//忽略大小写只能是在英文状态下的 a A
}
}
public class stringDemo3 {
public static void main(String[] args) {
//用键盘录入的数跟对象new出来的数比较是否相等
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str1 = sc.next();
//在代码中再定义一个字符串
String str2 = "abc";
//再用==号进行比较会相等吗?
System.out.println(str1 == str2);//false
}
}
public char charAt(int index): 根据索引返回字符
public int length():返回次字符串的长度
数组的长度:数组名.length
字符串的长度:字符串对象.length()
public static void main(String[] args){
Scanner sc=new Scanner();
System.out.println();
String str=sc.next();
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
System.out.println(c);
}
}
方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 反转容器中的内容
public int length() 返回长度(字符出现的个数)
public String toString() 通过toString()就可以实现把StringBuilder转换为String
StringJoiner概述
StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后内容是可变的
作用:提高字符串的操作效率,而且代码编写特别的简洁
StringJoiner构造
方法名 说明
public StringJoiner(间隔符号) 创建一个StringJoiner对象,指定拼接时时间间隔符号
public StringJoiner(间隔符号,开始符号,结束符号) 创建一个StringJoiner对象,指定拼接时时间间隔符号,开始符号,结束符号 扩展底层原理5:StringBuilder原码分析
默认创建一个长度为16的字节数组
添加的内容长度小于16,直接存
添加的内容大于16会扩容(原来的容量*2+2)
如果扩容之后还不够,以实际长度为准