今天在项目目中遇到了需要处理字符串的业务,索性就把String类的所有方法特性总结下来,以便日后查看!
1.字符串(String)是由多个字符(char)组成的一串数据(字符序列)
a:字符串字面值常量"abc",也可以看成是一个字符串对象。
b:字符串是常量,一旦被赋值,就不能被改变。
2.常见构造方法:
1)public String();
2)public String(byte[] bytes); 将字节数组转成人能看懂的
3)public String(byte[] bytes,int index,int length);
4)public String(char[] value);
5)public String(char[] value,int index,int count);
6)public String(String original);
3.判断功能:
1)boolean equals(Object obj); 比较字符串是否相同,区分大小写
2)boolean equalsIgnoreCase(String str) ; 比较字符串是否相同,不区分大小写
3)boolean contains(String str); 字符串对象是否包含给定字符串
4)boolean startsWith(String str);
5)boolean endsWith(String str);
6)boolean isEmpty();
4.获取功能:
1)int length();
2)char charAt(int index); 返回指定索引位置的char值
3)int indexOf(int ch);
4)int indexOf(String str); indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回-1。
5)int indexOf(int ch,int fromIndex);
6)int indexOf(String str,int fromIndex);
7)int lastIndexOf(String str); 返回在此字符串中最右边出现的指定子字符串的索引,如果没有找到子字符串,则返回-1。
8)String substring(int start);
9)String substring(int start,int end);
5.转换功能:
1)byte[] getBytes(); 将字符串转成计算机能看懂的
2)char[] toCharArray();
3)static String valueOf(char[] chs);
4)static String valueOf(int i);
5)String toLowerCase();
6)String toUpperCase();
7)String concat(String str)
6.替换功能:
1)String replace(char old,char new)
2)String replace(String old,String new)
3)String trim() (去掉空格)
4)int compareTo(String str) (字典顺序比较)
5)int compareToIgnoreCase(String str) (了解)
6)String[] split(String regex) (补充,切割功能)
面试常用:
一、字符串相加:
1. String str1 = "abc";
System.out.println(str1 == "abc");
步骤:
1) 栈中开辟一块空间存放引用str1,
2) String池中开辟一块空间,存放String常量"abc",
3) 引用str1指向池中String常量"abc",
4) str1所指代的地址即常量"abc"所在地址,输出为true
2. String str2 = new String("abc");
System.out.println(str2 == "abc");
步骤:
1) 栈中开辟一块空间存放引用str2,
2) 堆中开辟一块空间存放一个新建的String对象"abc",
3) 引用str2指向堆中的新建的String对象"abc",
4) str2所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出为false
3. String str3 = new String("abc");
System.out.println(str3 == str2);
步骤:
1) 栈中开辟一块空间存放引用str3,
2) 堆中开辟一块新空间存放另外一个(不同于str2所指)新建的String对象,
3) 引用str3指向另外新建的那个String对象
4) str3和str2指向堆中不同的String对象,地址也不相同,输出为false
4. String str4 = "a" + "b";
System.out.println(str4 == "ab");
步骤:
1) 栈中开辟一块空间存放引用str4,
2) 根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"ab",
3) 引用str4指向池中常量"ab",
4) str4所指即池中常量"ab",输出为true
结论:
a:字符串如果是变量相加(有变量参与),先开辟空间,在拼接
b:字符串如果是常量相加(常量优化机制),是先加,然后在常量池中找,如果有就直接返回,否则,就创建。
二、concat(String str) 与 + 的区别:
1.+可以是字符串或者数字及其他基本类型数据,而concat只能接收字符串。
2.+左右可以为null,concat为会空指针。
3.如果拼接空字符串,concat会稍快,在速度上两者可以忽略不计,如果拼接更多字符串建议用StringBuilder