String类
从String对象中获取字符或字符数组
String str = "happy birthday";
//获取str中下标为4的字符 'y'
System.out.println(str.charAt(4));
//创建一个字符数组
char chardst[] = new char[15];
//从str中获取下标为8~14(左闭右开)的字符串,置于chardst字符数组中
str.getChars(8, 14, chardst, 0);
System.out.println(chardst); // "rthday"
字符串的比较
str1.compareTo(str2)
//str1与str2比较,区分大小写。
// > 0 表示: str1 > str2
// == 0 表示: str1 == str2
// < 0 表示: str1 < str2
str1.compareTo(str2);
//字符串str1与str2比较。忽略大小写,即不区分大小写。
str1.compareToIgnoreCase(str2);
str1.equals(str2)
//str1与str2是否相等,区分大小写。
// == 0 表示: str1 == str2
// != 0 表示: str1 != str2
str1.equals(str2);
//字符串str1与str2是否相等。忽略大小写,即不区分大小写。
str1.equalsIgnoreCase(str2);
字符串与其他类型的转换
//字符串转换为其他数据类型
Integer.parseInt("2000");
Long.parseLong("2000");
Float.parseFloat("3.1415926");
Double.parseDouble("3.1415926");
//其他数据类型转换为字符串
String str = String.valueOf(i); //i指其他类型
i.toString();
字符串与字符数组互相的转换
String str = "abcdefg";
// 字符串转换为字符数组
char[] chstr = str.toCharArray();
// 字符数组转换为字符串
String strch = String.valueOf(chstr);
字符串查找
//查找字符ch第一次出现的下标 / 最后一次出现的下标
str.indexOf(char ch) / str.lastIndexOf(char ch)
//查找在指定索引之后的第一次ch出现的下标 / 指定索引之前的最后一次
str.indexOf(char ch, int beginIndex) / str.lastIndexOf(char ch, int beginIndex)
String str = "helloheelhappy";
System.out.println(str.indexOf('h',6)); // 9
System.out.println(str.lastIndexOf('h',6)); // 5
//查找str中第一次出现字符串str的开始下标 / 最后一次的开始下标
str.indexOf(String str) / str.lastIndexOf(String str)
String str = "heelhappyheelhappy";
System.out.println(str.indexOf("lha")); //3
System.out.println(str.lastIndexOf("lha")); //12
//查找在指定索引之后的第一次str出现的开始下标 / 指定索引之前的最后一次
str.indexOf(String str, int beginIndex) / str.lastIndexOf(String str, int beginIndex)
String str = "heelhappyheelhappy";
System.out.println(str.indexOf("lha", 7)); //12
System.out.println(str.lastIndexOf("lha", 7)); //3
截取、拆分
substring 与 split
String str = "hello, today is Monday";
// 截取字符串str中0~8(左闭右开)的字符串片段
str.substring(0,8); // "hello, t"
//以空格分隔
String strarr[] = str.split(" ");
for (int i = 0; i < strarr.length; i++)
System.out.println(strarr[i]);
替换、修改
concat, toLowerCase, toUpperCase, replace
String str = str1.concat(str2); //合并str1与str2字符串
str.toUpperCase(); //全部大写
str.toLowerCase(); //全部小写
replaceFirst()方法区分大小写。
使用"(?i)"可以不区分大小写,如str1。
String str = "Hello, hEllo";
String str1 = str.replaceFirst("(?i)HELLO", "Bye"); //Bye, hEllo
String str2 = str.replaceFirst("(?-i)HELLO", "Bye"); //Hello, hEllo
String str3 = str.replaceFirst("hEllo", "Bye"); //Hello, Bye
StringBuffer类
创建字符串
- StringBuffer类是字符串缓冲区,每个字符串缓冲区都有一定的容量,即存储空间。
- 只要字符串缓冲区的序列长度没有超出该容量,就不需要新分配内部缓冲数组。如果容量不足导致溢出,则此容量自动增大。
- StringBuffer创建的字符串的容量在长度基础上+16.
StringBuffer str = new StringBuffer("happy");
//获取str的长度 5
System.out.println("str.length = " + str.length());
//获取str容量 21
System.out.println("str capacity = " + str.capacity());
- 注意一下两段代码的区别,以更好理解StringBuffer类的length和capacity。
第一段代码中设置长度为10,超过strbuff的容量,所以为其申请新的容量;
而第二段代码中,第一次设置的长度为3,没有超过容量,所以不需要申请额外的容量。
StringBuffer strbuff = new StringBuffer(8);
System.out.println(strbuff.length()); // 0
strbuff.append("abcdefg");
System.out.println(strbuff.length()); // 7
System.out.println(strbuff.capacity()); //8
strbuff.setLength(10);
System.out.println(strbuff.length()); // 10
System.out.println(strbuff.capacity()); // 18
System.out.println(strbuff); //abcdefg
strbuff.setLength(3);
System.out.println(strbuff.length()); // 3
System.out.println(strbuff.capacity()); // 18
System.out.println(strbuff); //abc
StringBuffer strbuff = new StringBuffer(8);
System.out.println(strbuff.length()); // 0
strbuff.append("abcdefg");
System.out.println(strbuff.length()); // 7
System.out.println(strbuff.capacity()); //8
strbuff.setLength(3);
System.out.println(strbuff.length()); // 3
System.out.println(strbuff.capacity()); // 8
System.out.println(strbuff); //abc
strbuff.setLength(10);
System.out.println(strbuff.length()); // 10
System.out.println(strbuff.capacity()); // 18
System.out.println(strbuff); //abc
替换、删除、获取子字符串
StringBuffer类对象可以在本对象中添加、删除、修改。这是其与String类的区别。
StringBuffer strbuff = new StringBuffer();
strbuff.append("happy birthday to you");
System.out.println(strbuff.length()); // 21
System.out.println(strbuff.capacity()); // 34
// 替换下标的字符
strbuff.setCharAt(15, '!'); //替换下标为15的字符
System.out.println(strbuff); // happy birthday !o you
// 替换指定区间0~5(左闭右开)的字符串
strbuff.replace(0, 5, "That");
System.out.println(strbuff); // That birthday !o you
//StringBuffer的getChars方法,获取一段子字符串
char chardst[] = new char[10];
strbuff.getChars(3, 12, chardst, 0);
System.out.println(chardst); // t birthda
System.out.println(strbuff.length()); // 20
// 删除15~21(左闭右开)的字符串
strbuff.delete(15, strbuff.length());
System.out.println(strbuff); // That birthday !
// 删除下标为2的字符
strbuff.deleteCharAt(2);
System.out.println(strbuff); // Tht birthday !
添加 append()
StringBuffer类的append()与String类的concat()方法类似。其区别在于StringBuffer类不需要创建新的字符串对象,是在原有字符串的基础上修改的;而String类会创建新的字符串对象。
StringBuffer strbuff = new StringBuffer();
strbuff.append("...");
插入 insert()
StringBuffer strbuff = new StringBuffer();
strbuff.insert(index, str); //在下标为index的地方插入str,后面的元素向后移