一、.String类
(1).实例化方式
直接赋值
String str=“hello world”;
构造方法赋值
String str1=new String (“hello world”);
2.字符串的相等比较
“==”操作符用于比较两个变量的值是否相等,对于基本类型而言,比较的就是数值大小;对于引用类型而言,比较的实际上是保存地址是否相等而不会比较内容。
所以在字符串内容比较时,需要使用String类提供的equals()方法,区分大小写。
str1.equals(str2);
equalsIngoreCase()不区分大小写比较
3.String类的匿名对象(没起名字的对象)
所有字符串常量""都是Sring类的匿名对象
在比较两个字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较“hello world”.equals(str);
String str=“hello”;
System.out.println(str.equals(“hello”));//true//字符串对象调用equals()
System.out.println(“hello”.equals(str));//true,字符串常量调用equals(),
//"hello"是String类的匿名对象
4.两种实例化的区别?
直接赋值与构造赋值
直接赋值:
在JVM内部会维护一个字符串常量池(对象数组)。若采用直接赋值的方式进行String类的实例化操作,那么该对象会自动保存到对象池中。若下一次继续使用直接复制的方法实例化String对象,先在对象池中寻找是否有指定的内容对象。若有,直接引用。否则创建新空间,将新对象入池以供下次使用。
构造方法:
当使用构造方法实例化字符串时,实际上会开辟两次空间。
实例化后的对象并不会保存到对象池中,可以使用intern()方法来手工入池。
String str1=new String(“hello”).intern();
String str2=“hello”;
System.out.println(str1==str2);//true
5.字符串常量不可变更:堆中常量的值无法修改,但是栈中的指向可以变更。
字符串不要改变太多次,慎用“+”。
String str=“hello”;
str +=“world”;
str +="!!!";
System.out.print(str); //hello world!!!
以上字符串的变更是字符串对象的变更而非字符串常量。
6.字符与字符串
char[]–>String
public String(char[] value);将字符数组全部转换为字符串
public String(char[] value,int offset,int len);将字符数组的部分转为字符串
String–>char
public char charAt(int index);取得字符串指定索引的字符,从0开始
String–>char[]
public char[] toCharArray();将字符串转为字符数组
7.字节与字符串
字节用在二进制流与网络传输中
byte[]–>String
public String(byte[] value);将字节数组全部转换为字符串
public String(byte[] value,int offset,int len);将字节数组的部分转为字符串
String–>byte[]
public byte[] getBytes();将字符串转为字节数组
public byte[] getBytes(String charSet) ;将字符串按照指定编码格式转为字节数组
Linux默认编码为UTF-8,windows默认编码为GBK
编码:将字符串按照怎样的算法转为字节
8.字符串比较方法
比较方法
equals
equalsIngoreCase
比较大小
public int compareTo(String anotherString);比较两个字符串的大小关系
负数:小于
0:相等
正数:大于
按照ASCII码比较,只要发现不相等的内容算出差值直接返回,不会继续向下查找。
9.字符串查找
表的1 6 7 8
contains
indexOf:int
startsWith
endsWith
10.字符串替换
public String replaceAll(String regex,Stringreplacement);
将字符串所有指定内容替换为新内容
public String replaceFirst(String regex,Stringreplacement);替换首个内容
11.字符串拆分
public String[] split(String regex);按照指定格式将字符串全部拆分
public String[] split(String regex,int limit);将字符串部分拆分,数组长度为限定limit长度
12.字符串截取 左闭右开[)
public String substring(int beginIndex);从指定索引开始截取到字符串结尾
public String substring(int beginIndex,int endIndex);从指定索引开始到指定结束位置
13.其他方法
trim():去掉字符串的左右两边空格,中间保留
toUpperCase();将字符串转大写处理
toLowerCase();将字符串转小写处理
length();返回字符串长度
isEmpty();判断是否为空字符串,不包含null
14.俩SB:为了方便进行字符串内容的修改
StringBuffer
字符串拼接使用append()方法
String<–>StringBuffer
String–>StringBuilder
a.通过StringBuffer的构造方法
public StringBuffer(String str)
b.通过append(String str):StringBuffer
StringBuffer–>String
调用StringBuffer的toString();
独有方法:
字符串反转:reverse();
删除指定位置字符串:delete(int start,int end)
在指定位置插入任何元素:insert(int offset,各种数据类型b)
StringBuilder