一 String类
1 创建String对象的方式
// 先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"张三"
// 如果没有,则将"张三"存放进栈,并令str指向"张三"
// 如果已经有"张三",则直接令str指向“张三”
String str1 = "张三";
// 用new()新建的对象会在存放于堆中。每调用一次new()就会创建一个新的对象。
String str2 = new String("张三");
String str3 = new String();
str3 = "张三";
2 String对象的不变性
String 对象创建后则不能被修改,是不可变的。所谓的修改其实是创建了新的对象,所指向的内存空间不同
public class StringSample {
public static void main(String[] args) {
String str1 = "张三";
String str2 = "张三";
String str3 = new String("张三");
String str4 = new String("张三");
// 多次出现的字符串常量,java编译程序只创建1个
System.out.println(str1 == str2); // true
// new String(); 会创建一个新的实例,指向新的内存空间
System.out.println(str1 == str3); // false
System.out.println(str3 == str4); // false
// equals只比较两个字符串的内容是不是相同
boolean retVal = str1.equals(str3);
System.out.println(retVal); // true
// str1 被修改。其实际是指向了新的内存空间
str1 = str1 + "李四";
}
}
3 常用方法
更多可参考:https://www.runoob.com/java/java-string.html
int length() | 返回当前字符串的长度 |
int indexOf(int ch) | 查找ch字符在该字符串中第一次出现的位置 |
int indexOf(String str) | 查找str子字符串在该字符串中第一次出现的位置 |
int lastIndexOf(int ch) | 查找ch字符在该字符串中最后一次出现的位置 |
int lastIndexOf(String str) | 查找str子字符串在该字符串中最后一次出现的位置 |
String substring(int beginIndex) | 获取从beginIndex位置开始到结束的子字符串 |
String substring(int beginIndex, int endIndex) | 获取从beginIndex位置开始到endIndex位置的子字符串 |
String trim() | 返回去除了前后空格的字符串 |
boolean equals(Object obj) | 将该字符串与制定对象比较,返回true或false |
String toLowerCase() | 将字符串转换为小写 |
String toUpperCase() | 将字符串转换为大写 |
char charAt(int index) | 获取字符串中指定位置的字符 |
String[] split(String regex, int limit) | 将字符串分割为子字符串,返回字符串数组 |
byte[] getBytes() | 将该字符串转换为byte数组 |
4 实例
public class StringSample {
public static void main(String[] args) {
String str = "张三和李四是好兄弟";
System.out.println("str的长度:"+str.length()); // 9
System.out.println("[李]出现的位置:"+str.indexOf("李")); // 3
System.out.println("[3,5]之间的字符串:"+str.substring(3,5)); // 李四
}
}
二 StringBuilder
String 类具有是不可变性,当频繁操作字符串时,就会额外额外创建一个对象,产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。
StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。
1 创建StringBuilder对象的方式
StringBuilder sb2 = new StringBuilder("张三");
2 常用方法
str.append("abc") | 追加字符串 abc |
str.insert(num,"abc") | 在字符串num位置(从左到右数num个字符后,添加)添加 abc 内容 |
str.delete(int start,int end) | 删除字符串 |
str.toString() | 转换为string对象 |
str.length() | 获取字符的长度 |
str.reverse() | 将字符序列逆序 |
3 示例
public class StringSample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("张三");
System.out.println(sb.append("李四")); // 张三李四
System.out.println(sb.insert(0, "爱").insert(0, "我")); // 我爱张三李四
System.out.println(sb.delete(0,1)); // 爱张三李四
System.out.println(sb.reverse()); // 四李三张爱
}
}