1 .不可变字符串(String ):
(1)字符串相等的比较:
==:引用(内存地址)的比较
equals方法:字符串内容的比较,在比较或操作前先判断字符串是否为空,一般做法如下:
String str1 = “abc”;
String str2 = “abc”;
if(str1 != null && !str1.trim().equals(“”) && str2 != null && !str2.trim().equals(“”)){
//执行比较的内容
}
(2) 字符串的定义方式:
String str1 = “abc”;
String str2 = new String(“abc”);
(3)null 和 “”的区别:
null表示没有为字符串分配内存地址,在堆中没有开辟空间
“”表示空字符串,但分配了内存地址,并且开辟了空间。
(4)length():取得字符串的长度,注意与数组长度的区别,此处是方法,而数组出是属性,没有括号。
(5)charAt(int):取得字符串某索引处的字符值,注意字符串的索引范围是0~str.length()-1;
(6)indexOf(char):取得某个字符最早出现的索引值,lastIndexOf(char):取得某个字符最后出现的索引值,indexOf(int, char):取得字符从某处开始第一个的索引值。
(7)substring(int):取得从当前索引开始以后的所有字符串,substring(int, int)取得从第一个索引开始到第二个索引之前的所有字符,注意此方法名全是小写。
(8)trim():去掉字符串两端的空格。
(9)startsWith(char):判断字符串是否以某字符开头,endsWith(char):判断字符串是否以某字符结束。
(10)replace(char,char):字符替换,用第二个字符替换第一个字符
replaceAll(String, String):字符串替换,用第二个字符串替换第一个字符串。
(11)toLowerCase():转换成小写,toUpperCase():转换成大写(大小写转换例子见codeh)
(12)数值转换成字符串的一般处理:”” + num即用引号直接加数值。
(13)compareTo(String, String):比较两个字符串,返回int型,注意比较规律:如果位数相同则比较第一个不同字母的ASCII码,如果位数不同且大于位数较少的时仍没有不同的字符则比较位数,否则也比较ASCII码。
(14)字符串和其它类型之间的转换:
字符串->字节数组:str.getBytes();
字节数à字符串:new String(myByteArray)
字符串->整型:Integer.parseInt(String)
整型->字符串:”” + int 或new String(int)
字符串->整型对象:new Integer(String)
整型对象->字符串:new Integer().toString()
字符串->字符数组: str.toCharArray()
字符数组->字符串:new String(char[] charArray)
(15) new String(myByteString.getBytes("ISO-8859-1"), "GBK"):将字符串的编码格式从ISO-8859-1转换成GBK
(16)split(String):通过一个字符串参数将字符串分割并返回一个字符串数组,注意参数时字符串格式。
StringTokenizer(String, String, boolean):三个参数分别是要分割的字符串,分隔符,是否保留分隔符。通过:
while(st.hasMoreTokens()){//当有更多的token时
String token = st.nextToken();//取得下一个
System.out.println("token:" + token);
}
这种形式可以取得每一个分割完的字符串,在开发时常用到第二种方式。
2. 可变字符串(StringBuffer )
(1)容量问题:StringBuffer初始化没有字符串时容量为16,当初始化有字符串时,它的默认容量等于字符串长度加16。当添加字符串长度大于默认容量时,它的容量为当前容量乘以2再加2.
(2)长度问题:setLength(int):设置可变字符串的长度为当前值,如果当前值小于可变字符串中的已有字符串的长度时,字符串的内容会被从后向前剪掉。
(3)append(String/int/boolean…):可以追究各种类型的变量,但最终都回被转换成字符串,常用于数据库追究sql语句。
(4)insert(int, 内容):向字符串的不同索引处插入内容,内容可以时各种类型的变量
(5) capacity:可变字符串的容量;
(6)String和StringBuffer的区别和转换:
区别:String中字符改变(如添加后)内存地址会发生改变,引用变量指向另一地址,但是StringBuffer中字符串改变后内存地址不会发生改变,引用变量所指向的地址没有发生变化。
转换:String->StringBuffer: new StringBuffer(String)
StringBuffer->String: new StringBuffer.toString()