创建字符串的两种方式:
String s1=new String("ss");
String s2="ss";
由于第一种方式不仅在栈内存空间中创建对象,在字符串常量池中也创建
第二种方式现在字符串常量池中查找,如果找到,则不再创建,否则创建对象。
在编译期和运行期的不同:
/**
String类编译期与运行期分析
*/
class UseString
{
public static void main(String[] args)
{
//a,a1在编译期的值都确定时
String a="a1";
String a1="a"+1;
System.out.println(a==a1);
//b在编译期的值确定,但是bb在编译期的值不确定
String b="b1";
int bb =1;
String b1="b"+bb;
System.out.println(b==b1);
//c,c1在编译期都确定
String c="c1";
final int cc=1;
String c1="c"+cc;
System.out.println(c==c1);
//dd调用的是方法,在运行期才能确定值
String d="d1";
final int dd=getD();
String d1="d"+dd;
System.out.println(d==d1);
}
public static int getD()
{
return 1;
}
}
字符串的常用操作:
截取
拆分
public class StringMethod
{
public static void main(String[] args)
{
String s = "小舟,是个烂死猪,非常胖还不高";
//判断是否以指定字符串开头
boolean b1=s.startsWith("小舟");
//判断是否以指定位置的指定字符开头
boolean b2=s.startsWith("是",2);
//判断是否已指定字符结束
boolean b3=s.endsWith("烂死猪");
System.out.println(b1+" "+b2+" "+b3);
//找出特定位置的字符
char c=s.charAt(3);
System.out.println("charAt:"+c);
//把字符串转换为字符数组
char[] cs=s.toCharArray();
for (int i=0;i<cs.length ;i++ )
{
System.out.print(cs[i]+",");
}
System.out.println(s);
s=s.replace("小舟","BoatLet");
System.out.println(s);
s=s.replaceAll("[a-z]","*");
System.out.println(s);
s=s.replaceFirst("\\*","#");
System.out.println(s);
//字符串截取
String s1=s.substring(1);
System.out.println(s1);
String s2=s.substring(0,2);//包括第0,1个字符
System.out.println(s2);
//字符串拆分
String[] vs1=s.split(",");
for(String v:vs1){
System.out.println(v);
}
System.out.println("\n");
String[] vs2=s.split(",",2);//拆分的如果比较多,串则能拆成几个就是几个
for(String v:vs2){
System.out.println(v);
}
System.out.println(s);
//查找
boolean d1=s.contains("猪");
System.out.println("查找操作:"+b1);
int index1=s.indexOf('死');
System.out.println(index1);
int index2=s.indexOf("死猪");
System.out.println(index2);
int index3=s.lastIndexOf("*");//返回最后一次出现的索引
System.out.println(index3);
int index4=s.lastIndexOf("**");
System.out.println(index4);
}
}