String 的方法
charAt 获取字符
toCharArray 获取对应的字符数组
subString 截取子字符串
split 分隔
trim 去掉首尾空格
toLowerCase 全部变成小写
toUpperCase 全部变成大写
indexOf 某个字符的索引
lastIndexOf 最后出现的索引
contains 是否包涵某个字符串
replaceAll 替换所有
replaceFirst 替换第一个
字符串比较
1.
String str1 = "the light";
String str2 = new String(str1);
//==用于判断是否是同一个字符串对象
System.out.println( str1 == str2);
false
因为他们不是同一个对象
2.
String str1 = "the light";
String str2 = new String(str1);
String str3 = str1.toUpperCase();
//==用于判断是否是同一个字符串对象
System.out.println( str1 == str2);
System.out.println(str1.equals(str2));//完全一样返回true
System.out.println(str1.equals(str3));//大小写不一样,返回false
System.out.println(str1.equalsIgnoreCase(str3));//忽略大小写的比较,返回true
false 对象不一样
true 内容一样
false 大小写不一样
true 忽略大小写所以内容一样
StringBuffer
4个基本方法
append追加
delete 删除
insert 插入
reverse 反转
String str1 = "Hello World ";
StringBuffer str2 = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
str2.append("hello"); //在最后追加
System.out.println(str2);
str2.delete(2, 5);//删除2-5之间的字符
System.out.println(str2);
str2.insert(4, "four ");//在4这个位置插入 there
System.out.println(str2);
str2.reverse(); //反转
System.out.println(str2);
Hello World hello
He World hello
He Wfour orld hello
olleh dlro ruofW eH
length和capacity
String str1 = "aa";
StringBuffer str2 = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
System.out.println(str2.length());
System.out.println(str2.capacity());
2
18
2是str2的长度,19是StringBuffer分配的空间,不同jdk的capacity不同,这是jdk1.9的。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
StringBuffer部分源码:(有synchronized修饰)
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return super.capacity();
}
StringBuilder则直接调用他的抽象父类AbstractStringBuilder的方法:(没有synchronized修饰)
@Override
public int length() {
return count;
}
/**
* Returns the current capacity. The capacity is the amount of storage
* available for newly inserted characters, beyond which an allocation
* will occur.
*
* @return the current capacity
*/
public int capacity() {
return value.length >> coder;
}