StringBulider是一个可变的字符串类,可以把它看作是一个容器。
String和StringBuilder的区别:
String中的内容是不可变的
StringBuilder中的内容是可变的
String和StringBuilder的相互转换:
通过toString()方法,把StringBuilder转换成String
通过StringBuilder的构造方法,把String转换成StringBuilder
下来我们看一组代码:
public class StringBuilderTest
{
public static void main(String[] args)
{
StringBuilder s = new StringBuilder();
//追加
s.append("wwt").append(" show");
System.out.println(s);
//插入
s.insert(3," begin"); //从序号3(第一个字符为序号0)的位置插入 begin字符串
System.out.println(s);
//删除
s.delete(3, 3+" begin".length()); //将上面插入的 begin字符串,删除[3,8),前闭后开
System.out.println(s);
//字符串长度和容量大小
System.out.println("字符串长度:"+s.length());
System.out.println("字符串中序号是1的字符是:"+s.charAt(1));
s.append(" StringBuilder");
System.out.println(s);
System.out.println("i第一次出现的位置序号:"+s.indexOf("i"));
System.out.println("i最后一次出现的位置序号:"+s.lastIndexOf("i"));
//替换
s.replace(4,8, "test"); //从序号4到序号8之间的内容替换为test
System.out.println(s);
System.out.println("字符串反序输出:"+s.reverse());
s.reverse();
//字符串截取
System.out.println("截取序号4到8的内容:"+s.substring(4, 8));
//转换成String
System.out.println(s.getClass().getSimpleName());
System.out.println(s.toString().getClass().getSimpleName());
}
}
今天我们不读代码,我们使用一个神奇的“唱跳rap篮球”键,将StringBuilder类展开,瞅瞅它的源代码
打开以后,会有这么个东西
440行,我们不需要一行一行的看,只需看我们所寻找的目标即可
首先是这个
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
这段代码可以看到StringBuilder是由Final修饰的关键字,所以,我们可以知道这个这个类是不能被继承的,
他继承他的父类AbstractStringBuilder,而他的父类有两个接口,我们看父类的源代码可以看出来
首先,他有四个构造函数
StringBuilder() value //内容为空,并设置容量为16个字节;
StringBuilder(CharSequece seq) //使用seq初始化,容量在此基础上加16;
StringBuilder(int capacity) //设置特定容量;
StringBuilder(String str) //使用str初始化,容量str大小的基础上加16;
接下来是
StringBuilder delete(int start,int end) //删除从start到end(不包含)之间的内容;
StringBuilder deleteCharAt(int index) //删除index位置的字符;
StringBuilder replace(int start,int end,String str)// 用str中的字符替换value中从start到end位置的子序列;
StringBuilder reverse() //反转;
void setCharAt(int index,char ch) //使用ch替换位置index处的字符;
void setLength(int newLength)// 可能会改变内容(添加'\0');
int capacity() //返回value的大小即容量;
int length() //返回内容的大小,即count;
char charAt(int index) //返回位置index处的字符;
void ensureCapacity(int minimumCapacity) //确保容量至少是minimumCapacity;
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) //返回srcBegin到srcEnd的字符到dst;
int indexOf(String str) //返回str第一次出现的位置;
int indexOf(String str,int fromIndex) //返回从fromIndex开始str第一次出现的位置;
int lastIndexOf(String str) //返回str最后出现的位置;
int lastIndexOf(String str,int fromIndex) //返回从fromIndex开始最后一次出现str的位置;
CharSequence subSequence(int start,int end) //返回字符子序列;
String substring(int start) //返回子串;
String substring(int start,int end) //返回子串;
String toString() //返回value形成的字符串;
void trimToSize() //缩小value的容量到真实内容大小;
基本数据类型和对应的包装类类型、Integer包装类的构造方法、int类型和String类型之间的转换、Integer包装类的其他成员方法、Integer包装类的进制转换、Integer包装类的自动拆装箱原理、Integer包装类的数据缓冲池
构造函数
(1) public Integer(int value)
(2) public Integer(String s) 注意:s必须得是数字字符。
例子:
Integer i = new Integer(“1234”);
生成了一个值为1234的Integer对象。
int 类型 和 String 类型的相互转换
(1)int 类型 ——> String 类型
推荐方法:String.valueOf(number) 和 Integer.toString(number)
(2)String 类型 ——> int 类型
推荐方法:Integer.parseInt(s)
(3)String 类型 ——> float 类型
推荐方法:Float.parseFloat(s) :以此类推其他的基本数据类型。
如下所示
public class IntegerDemo {
public static void main(String[] args) {
// int ——> String
int number = 100;
// 方式1
String s1 = "" + number;
System.out.println("s1:" + s1);
// 方式2
String s2 = String.valueOf(number);
System.out.println("s2:" + s2);
// 方式3
// int ——> Integer ——> String
Integer i = new Integer(number);
String s3 = i.toString();
System.out.println("s3:" + s3);
// 方式4
// public static String toString(int i)
String s4 = Integer.toString(number);
System.out.println("s4:" + s4);
System.out.println("-----------------");
// String ——> int
String s = "100";
// 方式1
// String ——> Integer ——> int
Integer ii = new Integer(s);
// public int intValue()
int x = ii.intValue();
System.out.println("x:" + x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println("y:"+y);
}
}
byteValue()//取得用byte类型表示的整数;
int compareTo(Integer anotherInteger) //比较两个整数。相等时返回0;小于时返回负数;大于时返回正数。
int compareTo(Object o) //将该整数与其他类进行比较。如果o也为Integer类,进行方法2 的操作;否则,抛出ClassCastException异常。
static Integer decode(String nm) //将字符串转换为整数。
double doubleValue() //取得该整数的双精度表示。
boolean equals(Object obj) //比较两个对象。
float floatValue() //取得该整数的浮点数表示。
static Integer getInteger(String nm) //根据指定名确定系统特征值。
static Integer getInteger(String nm, int val) //上面的重载。
static Integer getInteger(String nm, Integer val) //上面的重载。
int hashCode() //返回该整数类型的哈希表码。
int intValue() // 返回该整型数所表示的整数。
long longValue() //返回该整型数所表示的长整数。
static int parseInt(String s) //将字符串转换成整数。s必须是时进制数组成,否则抛出异常。
static int parseInt(String s, int radix) //以radix为基数radix返回s的十进制数。所谓的基数,就是“几进制”。
short shortValue() //返回该整型数所表示的短整数。
static String toBinaryString(int i) //将整数转为二进制数的字符串。
static String toHexString(int i) //将整数转为十六进制数的字符串。
static String toOctalString(int i) //将整数转为八进制数的字符串。
String toString() //将该整数类型转换为字符串。
static String toString(int i)//将该整数类型转换为字符串。不同的是,此为类方法。
static String toString(int i, int radix) //将整数i以基数radix的形式转换成字符串。
static Integer valueOf(String s) //将字符串转换成整数类型。
static Integer valueOf(String s, int radix) //将字符串以基数radix的要求转换成整数类型。