1.String、StringBuffer和StringBuilder的区别
String:是被final修饰的,它的长度是不可改变的。
StringBuffer:长度可以改变,它是线性安全的。
StringBuilder:长度可以改变,它是非线性安全的,运行速度比StringBuffer更快。
1.1常用的内置方法
①append(String str): 在字符串末尾添加字符串
②reverse():将此字符串用其反转形式取代
③charAt(int index) 返回此序列中指定索引处的字符。
④toString() 返回此序列中数据的字符串表示形式。
⑤substring(int start) 截取指定索引处字符串
⑥ indexOf(String str) 返回指定字符的索引值
1.2字符串截取的几种方法
①split()方法:
String str = "5@285964@qq.com";
String[] strs = str.split("@");
for(int i=0;i<strs.length;i++){
System.out.println(strs[i].toString());
}
②subString(beginIndex)一个参数方法来进行字符串截取:将字符串从索引号为beginIndex开始截取,一直到字符串末尾。(注意索引值从0开始)。
String sb = "abcdef";
String str = sb.substring(2);
System.out.println(str);
③substring(int beginIndex, int endIndex)两个参数方法:从索引号beginIndex开始到索引号endIndex结束(返回结果包含索引为beginIndex的字符不包含索引endIndex的字符)
String sb = "abcdef";
String str = sb.substring(2,4);
System.out.println(str);
2.String s1 = new String(“hello”)和String s 2= “hello”有区别吗?
有。前者会创建2个对象,后者创建1个对象。
String s1 = new String(“hello”);在堆内存中创建了一个对象
在方法区中的字符串常量池中创建了一个”hello”常量值, 地址0x001;
指向new String();
new String()本身就是new出来的,所以也有一个地址值0x0001;
赋值给String s1,指向了String s1
String s2 直接赋值,在常量池里找,有就直接赋值,把”hello”的地址0x001给了String s2
String s2指向了常量池里的”hello”
==:比较引用类型比较的是地址值是否相同
equals:比较的是内容是否相同。
s1 == s2--------> false
s1.equals(s2)--------->true
3.StringBuffer和数组的区别?
二者都是可以看成是一个容器,装其他的数据,但StringBuffer的数据最终是一个字符串数据;而数组可以放置多种数据,但必须是同一种数据类型的。
4.字符串的拼接方法:concat,StringBuffer,StringBuilder,"+"。
①concat拼接法:
String s = "abcd";
s = s.concat("ef");
System.out.println(s);
②最简单的方法:用"+"连接起来
String a= "我会带带的";
String b= "看着你";
String c= a + "," + b;
System.out.println(c);
③StringBuffer:
StringBuffer a = new StringBuffer("我会呆呆的");
String b = "看着你";
StringBuffer c = a.append(",").append(b);
System.out.println(c);
④StringBuilder的用法与StringBuffer类似:
5.字符串逆序输出的方法:
①: StringBuffer的reverse方法(StringBuilder也是一样的用法)
String string="我爱他风风烈烈最疯狂";
StringBuffer sb=new StringBuffer();
sb.append(string);
System.out.println(sb.reverse());
②:StringBuffer的循环
String string="我爱他风风烈烈最疯狂";
int length=string.length();
StringBuffer sb=new StringBuffer();
for(int i=string.length()-1;i>=0;i--){
sb.append(string.charAt(i));
}
System.out.println(sb);
③:使用数组循环
String string="我爱他风风烈烈最疯狂";
int len=string.length();
char[] newstring=string.toCharArray();
for (int i = 0; i < len/2; i++) {
newstring[i]=string.charAt(len-i-1);
newstring[len-i-1]=string.charAt(i);
}
System.out.println(newstring);