//StringBuilder
//String类是 final,无法被继承的;所以StringBuilder并不是继承自String类;
// 而String内部维护的object[]数组也是final,无法被 修改
// String是无法被修改的,而平时对String的修改,其实是新建了一个String对象;
//如果需要频繁修改字符串的内容,建议使用 StringBuilder
// StringBuilder 其实就是一个存储字符的容器,也是内部维护了一个char[]数组;
// StringBuilder的初始长度为16, 如果capacity的容量不够,增长的方式为 capacity * 2 + 2
// 容器具备的行为:
// StringBuilder
// 增加
// append( Object e ) 追加到字符串的末尾(可以追加任意类型的数据);
// insert( int offset, Object e ) 插入元素到指定位置;(可以查任意类型数据)
// 删除
// delete( int startIndex, int endIndex ); 根据指定的开始与结束的索引值删除对应的内容
// deleteCharAt( int index ); 根据指定的索引值删除一个字符
// 修改
// setCharAt( int index, char ch ); 替换掉指定位置的字符
// replace( int start, int end, String str ); 根据指定范围内的子串
// reverse(); 翻转字符串缓冲类的内容
// 截取
// String subString( int start, int end ); 根据指定的索引值截取子串
// String subString( int start );
// ensureCapacity( int minimumCapacity );指定StringBuffer内部的字符数组容量
// 查看
// 判断
public class Demo3 {
public static void main( String[] args ){
StringBuilder sb = new StringBuilder();
//容器String追加 append
sb.append( "hello" );
sb.append( " " );
sb.append( "world" );
System.out.println( sb );
//
//增加 ---> 插入
sb.insert( 0 , "say ");
sb.insert( sb.length() , "!");
System.out.println( sb );
//删除
sb.delete( 0 , 4); // startIndex, endIndex
System.out.println( sb );
sb.deleteCharAt( 3 );
System.out.println( sb );
//修改
//翻转字符串
sb.reverse();
System.out.println( sb );
//替换指定位置的字符
sb.setCharAt( 0 , '@' );
System.out.println( sb );
//替换自定位置的字符串
sb.replace( 1 , 3, "#¥%");
System.out.println( sb );
//截取
String s = sb.substring( 4 );
System.out.println( s );
//查看
char ch = sb.charAt( 0 );
int index = s.indexOf( "a" );
int lastIndex = s.lastIndexOf( "abc" );
System.out.println( index );
//查找指定字符串第一次出现的子串
//查看长度
int length = sb.length();
int capacity = sb.capacity();
}