1.String的常用api:
length()计算字符串长度
charAt()截取一个字符
getChars()截取多个字符
equals()比较两个字符
indexof查找字符串的位置
public class StringDemo {
public static void main(String[] args){
String str = "thinking in Java";
int index = str.indexOf("in");
System.out.println("index="+index);//index=2
int index1 = str.indexOf("in",3);//从第4个字符开始寻找in
System.out.println("index1="+index1); //index1=5
int index2 = str.lastIndexOf("in");//从后往前查找
System.out.println("index2="+index2);//index2=9
}
}
StringBuffer的常用api:
append()指定位置插入
delete()删除指定内容
reserse()字符串反转
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("wwwrrr");
System.out.println("sb:" + sb);
// public StringBuffer reverse()
sb.reverse();
System.out.println("sb:" + sb);
}
}
StringBuilder的常用api:
replace()替换
insert()插入
deete()删除
public class StringDemo {
public static void main(String[] args) {
StringBuilder stringbulider = new StringBuilder("eref");
stringbulider.append(" is good");
System.out.println(stringbulider);
stringbulider.delete(8, 15);
System.out.println(stringbulider);
stringbulider.replace(0, 7, "Person");
System.out.println(stringbulider);
stringbulider.reverse();
System.out.println(stringbulider);
StringBuilder stringbulider1 = new StringBuilder("wh");
String s = "at";
stringbulider1.insert(2,s);
System.out.println(stringbulider1);
}
}
2.共同点;底层都使用char[]存储。StringBuilder和StringBuffer非常类似,均为可变的字符序列,而且方法也一样
不同点:
String:不可变字符序列
StringBuffer:可变字符序列、效率低、线程安全
StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
(1)如果要操作少量的数据用 String;
(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;
(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。
3.Java中的+
对字符串的拼接,其实现原理是使用StringBuilder.append
。在for
循环中,每次都是new
了一个StringBuilder
,然后再把String
转成StringBuilder
,再进行append,每次都新建了一个StringBuilder,需要的内存空间很大。
4.将unicode字符集转为本地字符集(GB2312或GBK)的过程叫编码,反之叫解码。
编码
import java.io. *;
public class CharCode{
public static void printByteArray(String msg,byte[]t){
System.out.println(msg+"******");
for(int i=0;i<t.length;i++){
System.out.println(Integer.toHexString(t[i]));
}
}
public static void printCharArray(String msg, char[] c){
System.out.println(msg+"******");
for(int i=0;i<c.length;i++)(
System. out.printIn(Integer.toHexString(c[i]));
}
}
public static void main(String[ ] args){
try{
String str="中文";
System.out.println(str);
printCharArray("unicode:",str.toCharArray());
byte[] b =str.getBytes("GB2312");
printByteArray("GB2312",b);
byte[]m =str.getBytes("ISO8859-1");
printByteArray("ISO8859-1",m);
}
catch(UnsupportedEncodingException e){
System. out.printIn("没有相应的字符集!");
}
}
}
解码
import java.io.*;
public class Decode{
public static void printByteArray(String msg,byte[] t){
System.out.println(msg+"****************");
for(int i=0;i<t.length;i++){
System.out.println(Integer.toHexString(t[i]));
}
}
public static void printCharArray(String msg,char[] c){
System.out.println(msg+"****************");
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());
}
}
}