String类
定义方法:
String s = "abc";
String s = new String("abc");
特点: 字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中,但是上述的new在堆中也创建了一个对象abc
所以第二种方式是两个对象,而第一个只有一个对象
字符串中的equals有被复写过,所以比较的是内容。
构造函数的比较:
String s1 = new String();
String s2 = null;
String s3 = "";
new String(char[]);
new String(char[],offset,count);
String的常用方法:
获取:
经常用于遍历
获取字符串长度;length()
经常用于反转等对字符串进行的操作
指定位置的字符 char charAt(int index)
获取指定字符的位置,如果不存在返回-1,通过-1来判断字符是否存在
经常用于输出字符的次数可以用
int indexOf(int ch); 返回第一次找到的字符角标
int indexOf(int ch,int fromIndex) 返回从指定位置开始第一次找到的角标
int indexOf(String str) 返回第一次找到的字符串角标
int indexOf(String str,int fromIndex) 从指定位置开始第一次找到的字符串角标
int lastIndexOf(int ch) 找到最后一次找到该字符的角标
int lastIndexOf(int ch,int fromIndex) 从指定位置开始寻找最后一次找到该字符的角标
int lastIndexOf(String str) 找到最后一次找到该字符串的角标
int lastIndexOf(String str,int fromIndex) 从指定位置开始寻找最后一次找到该字符串的角标
获取子串
String subString(int start) 从start位置开始,到length()-1为止的字符串
String subString(int start,int end) 从开始到结束-1的字符串
String subString(0,str.length()) 从开始到结束-1的字符串 返回当前字符串
判断
字符串中包含指定的字符串
boolean contains(String subString)
字符串是否以指定字符串开头
boolean startsWith(String)
字符串是否以指定字符串结尾
boolean endsWith(String)
判断字符串是否相同
boolean equals(String) 覆盖object方法,判断字符串内容是否相同
判断字符串内容是否相同,忽略大小写
boolean equalsIgnoreCase(string)
转换
通过构造函数可以将字符数组或者字节数组转成字符串
new String(char[])
new String(byte[])
可以通过字符串中的静态方法,将字符数组转成字符串
static String copyValueOf(char[])
static String copyValueOf(char[],int offset,int count)
static String valueOf(char[])
static String valueOf(char[],int offset,int count)
将基本数据类型或者对象转成字符串
static String valueOf(char)
static String valueOf(boolean)
static String valueOf(double)
static String valueOf(float)
static String valueOf(int)
static String valueOf(long)
static String valueOf(Object)
将字符串转换大小写
String toLowerCase()
String toUpperCase()
将字符串转成数组
char[] toCharArray()
byte[] getBytes();
将字符串转成字符串数组
String[] split(分割规则)
将字符串进行内容替换(修改后变成新字符串,并不是修改了原先的字符串)
String replace(oldChar,newChar)
String replace(oldstring,newstring)
追加内容
String concat(String) 等效于 +
String trim() 去除字符串两端的空格
int compareTo()
如果参数字符串等于此字符串,则返回值0
按字典顺序排序,小于则返回小于0的值,大于则返回大于0的值
字符串的缓冲区 StringBuffer
构造一个初始容量为16个字符的缓冲区
特点:
可以对字符串内容进行修改
是一个容器
是可变长度
缓冲区中可以存储任意类型的数据
最终需要变成字符串
固有方法:
添加:
StringBuffer append(data) 追加数据
StringBuffer insert(index,data) 在指定位置插入数据,配合二分查找法插入min的值
删除
StringBuffer delete(start,end) 删除从start到end-1的元素
StringBuffer deleteCharAt(index) 删除指定位置的元素
sb.delete(0,sb.length()); 清空缓冲区
修改
StringBuffer replace(start,end,string) 将start到end-1替换成string
void setCharAt(index,char) 替换指定位置的字符
void setLength(len) 将原字符串置为指定长度的字符串
查找(查不到返回-1)
int indexOf(String) 返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String,int fromIndex) 从指定位置开始查找字符串
int lastIndexOf(String) 返回指定的子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String,int fromIndex) 从指定的索引开始反向搜索
获取子串
string subString(start) 返回start到结尾的子串
string subString(start,end) 返回start到end-1的子串
反转
StringBuffer reverse() 返回一个字符串,该字符串是本来字符串反转后的结果
StringBuilder 字符串缓冲区
1.5之后出现,字符串生成器,跟buffer一样初始容量为16
用在字符串缓冲区被单个线程使用的时候
方法和buffer一样
区别:
StringBuffer线程安全
StringBuilder 线程不安全
单线程操作 StringBuilder 效率高
多线程操作 StringBuffer安全