String是字符串,String是一个类。
String 字符串用一对""表示
1.String类时使用final修饰,不能被继承
2String 实现了Serializable序列化接口。支持序列化以及反序列化操作(IO)
3.String实现了Comparable接口 string支持比较大小
4.String类中定义了private final char value[];存放字符串的值(String底层通过字符数组来存放字符序列)
String是不可变的字符序列,具有不可变性
//不可变性 String s1="hello";//使用字面量(常量)对String赋值 String s2="hello"; System.out.prinln(s1==s2);//true 比较对象地址是否相等 s1="helloworld"; System.out.println(s1==s2);//false
在其底层代码中不难看出String类是继承Object 实现序列化接口(Serializable),线程(Comparable<String>)等等
public final class String extends Object
implements Serializable,Comparable<String>,CharSequence
而常量池中的数据一般是不重复的(尽管使用的是”==“比较比较的是对象的地址)

String的创建方法:
常用:
1.字面量赋值
2.String (String original);
吧字符串封装成字符串对象
this.value = original;
s2->new 的对象(对象的属性value)value->常量池
了解==\equals之间的区别(传址、传值)
String s1="hello";
String s2="hello";
String s3=new String ("hello");
String s4=new String ("hello");
s1==s2;//true
s1==s3;//false
s3==s4;//false

String(char [] value,int index ,int dest)
char[] cArr={'a','b','c'}
String s =new String(cArr);
//s="abc";
String s1=new String (cArr,1,2);
//s="bc";
字符串拼接过程中,一旦出现了变量,那么最终拼接之后的字符串都保存在堆中
String s1="hello"; String s2="world"; String s="helloworld"; String s3="hello"+"world"; //有了变量存储位置就会放在堆中 String s4=s1+"world"; String s5="hello"+s2; s==s3;//true s==s4;//false s==s5;//false //堆中的存储位置不同 s4==s5;//false
1.boolean equals(Object obj);比较字符串内容是否相同(尽量使用,少用==)
String s1="hello"; String s2=new String("hello"); s1==s2;//false 比较地址是否相等 String s3="Hello"; s1.equals(s2);//true boolean result=s1.equalsIgnoreCase(s3); //true
3..boolean startsWith(String str);判断字符串是否以str开头
4.boolean endsWith(String str)判断字符串对象是否以指定的str结尾
获取
int length();
(int 是返回值)获取字符串长度,其实就是字符个数
char charAt(int index);
获取指定索引(从0开始)处的字符
int indexOf(String str);
获取str在字符串对象中第一次出现的索引(默认从0开始查找)
使用场景:判断字符串中是否包含某个子串
特:s.indexOf("e",4);(但是查找到的索引还是从0开始记数)
从后向前找
s.laseIndexOf("e");
String substring (int start);
从start开始截取字符串
没有返回值就是在原有基础上修改像数组但是String一般都有返回值,因为字符串不可被修改
需要使用新的字符串来接受
String str=s.substring (5);
String substring(int start ,int end);
从start开始,到end结束。[start,end)
String类转换功能
char[] (返回值类型) toCharArray();
把字符串转化为字符数组
String toLowerCase();
把字符串转换为小写字符串
String toUpperCase();
把字符串转换为大写字符串
String类的其他方法
String trim()
去除字符串两端空格
(注册时候后台要将首尾空格去掉或者前台失去焦点后自动去除)
String[] split(String str)
按照指定符号分割字符串
String s="a.png"; String[] s1=s.split("\\.");//"."可能被转义我们需要加上\\ //获取后缀 String fileName="a.xxx.png"; String fileExt=fileName.substring(fileName.lastIndecOf("."));// .png fileExt1=fileName.substring(fileName.lastIndecOf(".")+1);//png
1.int compareTo(String anotherString)
比较两个字符串的字典。
如果字符串长度相等的情况下,依次比较每个字母,如果相同位置的字母不同,返回每个字母对应的ascii码值的差
如果当前位置字母相同,则比较下一个
如果每一位都相同,返回0
如果字符串长度不同,则返回两个字符串长度的差值
先比较每一位如果不同就输出差值,再比较长度
String s1="ab";// 97 98 99 String s2="dfg";//100 102 103 int result=s1.compareTo(s2); //-3第一个字母相等
String concat(String str)
将指定的字符串拼接在字符串的末尾
如果并且只有当此字符串包含指定的字符序列的字符串值。则返回真值
String intern()
将字符串存放到常量池并返回该对象
如果常量池中没有helloworld,则开辟空间存放你hell world,并返回
boolean matches(String regex)
告诉是否存在正则表达式
String regex="\\d+";//正则表达式 String num="123"; boolean matches =num.matches(regex);
//替换指定的字符(字符串)全部替换 String s=s1.replace('a','v'); //a替换成v String s=s1.replace("ab","ni");
浙公网安备 33010602011771号