1. 字符串(String)
字符串操作是计算机程序设计中最常见的行为。
String并不是基本数据类型,而是一个对象。查看源码会发现,String是一个被final关键词修饰的字符数组。因此String类是不可变类,任何对String的改变都会引发在String pool中新的String对象的生成。
用处如图所示
String的intern方法:intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。
2. StringBuffer 与 StringBuilder
StringBuffer 和StringBuilder都是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
它们的原理和操作都基本相同,区别在于StringBuffer持并发操作,线性安全适合多线程中使用。StringBuilder不支持并发操作,线性不安全,不过在单线程中的性能比StringBuffer高。
3. 常用的方法(StringBuffer)
append方法:追加内容到StringBuffer的末尾
deleteCharAt方法:删除指定位置的字符,将剩余内容形成新的字符串。
insert方法:insert(int offset, String str)在索引值位置插入字符串
reverse方法:将StringBuffer对象中的内容反转,形成新的字符串
setCharAt方法:setCharAt(int index, char ch)修改位置上的字符
trimToSize方法:将对象存储空间缩小到与字符串长度一致,减少空间浪费
getChars方法:getChars(int start,int end, char chars[],int charStart)将对象中从start位置开始,到end位置的字符串截取复制给以charStart位置开始的chars数组。
4.应用
剑指offer 04题:将字符串中的空格替换成%20
package atOffer04;
import java.util.Scanner;
public class ReplaceSpace {
public static String replaceSpace(StringBuffer str) {
if(str == null)
return null;
StringBuilder sb = new StringBuilder();
for(int i = 0; i<str.length(); i++) {
if(str.charAt(i) == ' ')
sb.append("%20");
else
sb.append(str.charAt(i));
}
return sb.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
StringBuffer str = new StringBuffer(sc.nextLine());
System.out.println(replaceSpace(str));
sc.close();
}
}
要点:字符串的修改操作即StringBuffer的使用