String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能有子类。String类对象创建后不能修改,由0或多个字符组成。
String是引用类型,内部并不存储字符串本身,而是存了一个数组和哈希值
这个数组被final修饰所以,所以不能改变引用指向的对象,而且这个数组也被private修饰
所以不能通过下标来访问修改数组中的内容
String(array)
char[] array = {'h','e','l','l','o'};
String s = new String(array);
System.out.println(s);
输出:hellow
boolean equals(Object anObject)
返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常
int indexOf(int ch) //返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, int fromIndex) //从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str) //返回str第一次出现的位置,没有返回-1
int indexOf(String str, int fromIndex) //从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch) //从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str) //从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str, int fromIndex) //从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1
上述方法都是实例方法(对象方法)
//字符串转数字
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
//数字转字符串
int date3 = String.valueOf(123);
public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串
public String toCharArray()// 字符串转数组
public String concat(String str) // 将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。
String replace(CharSequence target, CharSequence replacement); //将所有的target替换为replacement
String replaceAll(String regex, String replacement); //替换所有的指定内容
String replaceFirst(String regex, String replacement); //替换首个内容
注:替换不是修改当前字符串,而是产生一个新的字符串
String[] split(String regex); //将字符串全部拆分
String[] split(String regex, int limit); //将字符串以指定的格式,拆分为limit组
注意事项:
String substring(int beginIndex); //从指定索引截取到结尾
String substring(int beginIndex, int endIndex); //截取部分内容
注:前闭后开区间的写法, substring(0, 4) 表示包含 0 号下标的字符, 不包含 4 号下标
String trim();
String isEmpty();
String类中的字符实际保存在内部维护的value字符数组中
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。
以下是StringBuilder类中存储的方法
StringBuff append(String str)//在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量
char charAt(int index) //获取index位置的字符
int length() //获取字符串的长度
int capacity() //获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity) //扩容
void setCharAt(int index,char ch) //将index位置的字符设置为ch
StringBuff insert(int offset, String str) //在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuffer deleteCharAt(int index) //删除index位置字符
StringBuffer delete(int start, int end) //删除[start, end)区间内的字符
StringBuffer replace(int start, int end, String str) //将[start, end)位置的字符替换为str
String substring(int start) //从start开始一直到末尾的字符以String的方式返回
String substring(int start,int end) 将[start, end)//范围内的字符以String的方式返回
StringBuffer reverse() //反转字符串
String toString() //将所有字符按照String的方式返回
int indexOf(String str) //返回str第一次出现的位置
int indexOf(String str, int fromIndex) //从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str) //返回最后一次出现str的位置
int lastIndexOf(String str, int fromIndex) //从fromIndex位置开始找str最后一次出现的位置
String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。
注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
StringBuilder变为String: 调用toString()方法
public static void main(String[] args) {
//StringBuilder转换为String
StringBuilder sb1 = new StringBuilder();
sb1.append("hello");
//String s = sb; //这个是错误的做法
//public String toString ():通过toString() 就可以实现把StringBuilder 转换为String
String s = sb1.toString();
System.out.println(s);
//String转换为StringBuilder
String ss = "hello";
//StringBuilder sb = s; //这个是错误的做法
//public StringBuilder(String s): 通过构造方法就可以实现把String 转换为StringBuilder
StringBuilder sb2 = new StringBuilder(s);
System.out.println(sb2);
}
用于多线程