【概念】
字符串是一个特殊的对象
字符串一旦初始化就不可以被改变
String s="abc";
String s1="abc";
String s2=new String("abc");
此时 s==s1; 这个表达式是true 因为这两个指向的地址一样
s==s2,这个表达式是false,因为他们指向的地址一样
s="abc";是在字符串常量池中创建对象,如果常量池中已经存在字符串,那么就指向这个字符串
s2=new String("abc");是在堆内存中new了一个对象。
【equals】
String类中的equals复写类Object的equals比较的是内容。
【构造方法】
String s=new String();//等效于String s="";不等效Sting s=null;
String(byte[]bytes);//可以将一个数组变成字符串
new String(byte[] b, int n, int m)//可以将一个数组变成字符串,m,n截取b的长度,这个方法可以避免打印的时候出现乱码
如:byte []arr={65,66,67,68};
String s=new String(arr);
System.out.println("s="s1);
输出:s1=ABCD;它会自己去查ASCII码表
String(char[]value);
将一个字符数组变成一个字符串
String(char[]value,int offset,int count)
将字符数组的一部分转成字符串
char[]values={'a','b','c','d'}
String s=new String(values,1,3);
输出 s=bcd;
【常用API】
1.获取
1.1获取字符串中字符的个数(长度)
int length();
1.2根据位置获取字符
char charAt(int index)
1.3根据字符或者字符串获取在字符串中第一次出现的位置,如果没找到会返回-1
int indexof(int ch) //为什么参数是int呢?这个方法,传字符也可以,传字符编码也可以
int indexof(int ch,int fromIndex) //根据字符获取在字符串中第一次出现的位置,从指定位置开始索引。这个位置还是整个字符串中的位置
int indexof(String str) //根据字符串取在字符串中第一次出现的位置
int indexof(String str,int fromIndex) //根据字符串取在字符串中第一次出现的位置,从指定位置开始索引
1.4根据字符或者字符串获取在字符串中第一次出现的位置,从末尾开始索引,如果没找到返回-1
int lastIndexof(int ch)
int lastIndexof(int ch,int fromIndex)
int lastIndexof(String str)
int lastIndexof(String str,int fromIndex)
1.5获取字符串的一部分,也叫子串
String substring(int beginIndex,int endIndex) //包含beginIndex,不包含endIndex
String substring(int beginIndex)
2.转换
2.1 将字符串变成字符串数组(字符串的切割)
string [] split(String regex);//涉及到正则表达式,如果是"."需要转义成普通的字符。split("\\.");
2.2 将字符串转成字符数组
char[] toCharArray();
2.3 将字符转成字节数组
bytep[] getBytes(); //s="ab你",s.getBytes(),会输出97,98,-60,-29,
这是因为"ab"在ASCII编码中是97,98都是一个字节,而"你"是两个字节,在中国的编码表中高位都是1,所以对应的都是负数。
2.4 将字符串转成大小写
String toUpperCase();//大写
String toLowerCase();//小写
2.5 替换
String replace(char oldChar,char newChar)//替换字符
String replace(CharSequence s1,CharSequence s2)/替换字符串
CharSequence:这是一个接口,实现了这个接口的子类有:String ,StringBuffer,StringBuilder
2.6
String trim()//去除字符串两端的空白
2.7将字符串连接
String concat(String s);
2.8将基本数据类型转为字符串
String valueOf(Object obj)
3.判断
3.1两个字符串是否相同
boolean equals(Object obj);
boolean equalsIgnoreCase(String str);//忽略大写比较两个字符串是否相同
3.2是否包含
boolean contains(String str)
3.3开头和结尾
boolean startsWith(String str)
boolean endsWith(String str)
通常是用来判断文件用的
4.比较
compareTo(String anotherString)
按照ASCII码表的顺序比较,如果参数比字符等于字符串,返回0,如果此字符串参数
小于参数字符串,返回一个小于0的值,反之会返回一个大于0的值。这个值就是两个字符的差距。
"abc".compareTo("aqz");
比较的顺序是 a跟a比一样,b跟q比,出结果就直接返回了。
5.字符串池的操作
String intern();//如果字符串池中已经包含了一个等于此String对象的字符串,则返回池中的字符串
,否则将此String对象添加到池中,并返回此String对象的应用