1. 借助JDK, 选取几个String与StringBuffer 、StringBuilder的常用API,并编写实例测试API的功能。
String的常用API:
1.public String replace(char oldChar,char newChar)
=
2.public String[] split(String regex, int limit)//regex 正则表达式分隔符。limit 分割的份数。
此方法返回的数组包含此字符串的每个子字符串,该字符串由与给定表达式匹配的另一个子字符串终止,或由字符串结尾终止。 数组中的子字符串按照它们在此字符串中的顺序排列。 如果表达式与输入的任何部分不匹配,则生成的数组只有一个元素,即这个字符串。
3.public String toUpperCase(Locale locale)
将所有在此字符String使用给定的规则,大写Locale 。
StringBuffer的常用API:
1.public StringBuffer reverse()
2.public String substring(int start, int end)
返回一个新的String ,其中包含此序列中当前包含的字符的子序列。 子串起始于指定的start ,并扩展到索引号为end - 1 。
3.public StringBuffer delete(int start, int end)
删除此序列的子字符串中的字符。 子串开始于指定start并延伸到字符索引end - 1 ,或如果没有这样的字符存在的序列的结束。 如果start等于end ,则不作任何更改。
StringBuilder的常用API:
1.public StringBuilder deleteCharAt(int index)
删除char在这个序列中的指定位置。 这个序列缩短了一个char 。
2.public StringBuilder insert(int offset,String str)
将字符串插入到此字符序列中。
2. 请简述String,StringBuffer,StringBuilder三者之间的共同点与区别,应该分别在何种场景下使用?
共同点:都是用来处理字符串,都可以自动检测数组越界等运行时异常。
不同点:String是不可变类,在这个对象中的字符序列是不可变的
StringBuffer代表一个字符序列可变的字符串
StringBuilder代表可变字符对象,但StringBuffer线程安全,StringBuilder非线程安全,所以性能略高。
使用场景:String在字符串不经常变化的场景中使用,如常量的声明,简单的变量运算。
StringBuffer在进行频繁的字符运算和多线程环境中使用
StringBuilder在进行频繁的字符运算和单线程环境中使用
3. 为什么不建议在for循环中使用“+”进行字符串拼接?
使用“+”进行字符串拼接会使用String类,String类的对象不可变,一但对象创建后对象内的字符系列不可变,直至对象被销毁。而在for循环频繁使用字符拼接会产生大量String对象,消耗内存且效率不高。
4. 什么是字符串的编码与解码?请举例说明。
编码:将unicode字符集转换为本地字符集如(GBK)的过程
package javaCharCode_DeCode;
import java.io.*;
public class CharCode {
public static void printByteArray(String msg,byte []t) {
for(int i=0;i<t.length;i++) {
System.out.println(Integer.toHexString(t[i]));
//转换成16进制
}
}
public static void printCharArray(String mag,char []c) {
for(int i=0;i<c.length;i++) {
System.out.println(Integer.toHexString(c[i]));
}
}
public static void main(String []args) {
try {
String str ="中文";
printCharArray("unicode", str.toCharArray());//toCharArray()将字符串转换为字符数组。
//unicode字符集中“中文”的对应代码
byte[]b=str.getBytes("GB2312");//编码
printByteArray("GB2312", b);
byte[]m=str.getBytes("ISO8859-1");//转为ISO8859-1对应的代码
printByteArray("ISO8859-1",m);
}
catch(UnsupportedEncodingException e) {
System.out.println("没有相应的字符集!");
}
}
解码:将本地字符集转换为Unicode字符集的过程
package javaCharCode_DeCode;
public class Decode{
public static void printByteArray(String msg,byte []t) {
for(int i=0;i<t.length;i++) {
System.out.println(Integer.toHexString(t[i]));
//转换成16进制
}
}
public static void printCharArray(String mag,char []c) {
for(int i=0;i<c.length;i++) {
System.out.println(Integer.toHexString(c[i]));
}
}
public static void main(String []args) {
byte[]b=new byte[6];
int t=0,pos=0;
String s;
try {
while(t!='\n') {
t=System.in.read();//只读一个字符
b[pos]=(byte)t;
pos++;
}
printByteArray("本地码",b);
s = new String(b,"GBK"); //解码
System.out.println(s);
printCharArray("unicode码:",s.toCharArray());
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
}