1. 字符串是不变对象:字符串内容一旦创建,不可改变,若想改变某个字符串内容一定会创建新对象`
String s1="123abc";
String s2="123abc";
String s3=new String("123abc");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s1.equals(s3));//true
s1=s1+"!";//创建新对象
System.out.println(s1);//123abc!
System.out.println(s2);//123abc
System.out.println(s1==s2);//false
/*
* 编译器的一个优化措施:
* 当一个计算表达式计算符两边都是字面量时,会直接计算结果,然后将结果编译到class文件中
* 所以下面代码在class文件中的样子是
* String s5="123abc";
*/
String s4="123"+"abc";//在生成class文件之前,编译器就把两个自变量相加算好了,得出123abc
System.out.println(s4==s2);//true
String str1="123";
String str2="abc";
String s5=str1+str2;//注意区分和上一段代码
System.out.println(s5==s2);//false
2. int length(): 获取字符串长度,无论中文还是英文每个字符都是一个长度。
public static void main(String[] args) {
String str="我爱Java";
System.out.println(str.length());//6
}
3. int indexOf(String str): 该方法用来查找给定字符串在当前字符串中的位置,该方法有几个重载方法。
// 0123456879012345
String str="thinking in java";
//查找in在str字符串中的的位置,若没有会返回-1
int index=str.indexOf("in");
System.out.println("index "+index);//2 返回第一次出现in的首字母的位置
int index1=str.indexOf("In");
System.out.println("index "+index1);//-1 java区分大小写,找不到的话就返回-1
/*
* 重载方法允许从指定的位置开始查找
*/
index=str.indexOf("in",3);
System.out.println("index "+index);//5 从3位置开始找,但是找到的位置依然是整个字符串中的位置
/*
* 查找最后一次出现指定字符串的位置
*/
index=str.lastIndexOf("in");
System.out.println("index "+index);//9 最后一次出现in的位置是9
4. String substring(int start,int end): 截取字符串,从指定位置(start)开始截取到指定的位置(end),java api有一个特点,通常用两个数字表示范围时,都是含头不含尾的。
// 0123456789012345
String str="thinking in java";
//截取ing
String sub=str.substring(5,8);//含头不含尾,所以要到8处
System.out.println("sub:"+sub);//sub:ing
// 若只传入一个参数,这是从指定的位置开始截取到字符串末尾
String host="www.didi.cn";
sub=host.substring(4, 8);//截取第4位到第8位
System.out.println(sub);//didi
sub=host.substring(4);//截取第4位到结尾
System.out.println(sub);//didi.cn
5. String trim(): 去除当前字符串两边的空白字符
String str=" hello ";
String trim=str.trim();
System.out.println(str);
System.out.println(trim);
6. char charAt(int index): 获取当前字符串指定下标对应的字符
// 0123456789012345
String str="thinking in java";
//查看第五个字符是什么
char c=str.charAt(4);
System.out.println(c);//k
/*
* 检查一个字符串是否为回文 回文意思是正反读都一样
*/
// 01 234 567 8
String info="上海自来水来自海上";
for(int i=0;i<info.length()/2;i++){
if(info.charAt(i)!=info.charAt(info.length()-i-1)){
System.out.println("不是回文");
return;
}
}
System.out.println("是回文");
7. boolean startsWith(String str) boolean endsWith(String str) 判断当前字符串是否是以指定的字符串开始或结尾的
// 0123456789012345
String str="thinking in java";
boolean starts=str.startsWith("thi");//注意大小写的问题
System.out.println("starts:"+starts);//true
boolean ends=str.endsWith("ava");
System.out.println("ends:"+ends);//true
8. String toUpperCase() String toLowerCase(): 将当前字符串的英文转换为全大写或全小写
String str="我爱Java";
String upper=str.toUpperCase();
System.out.println(upper);//我爱JAVA
String lower=str.toLowerCase();
System.out.println(lower);//我爱java
9. String提供了若干重载的静态方法,static String valueOf(XXX xxx): 该方法的作用是将Java中其他类型转换为字符串
int a=1;
String strA=String.valueOf(a);
System.out.println(strA+1);//11
double d=1.1;
String strB=String.valueOf(d);
System.out.println(strB+1);//1.11
10. 字符串拼接的性能问题
String str="a";
for(int i=0;i<1000000;i++){
str+="a";
}
11. StringBuilder: 提供了用于修改字符串内容的相关方法,其内部维护的是一个可变的字符数组,所以修改都是在当前对象内部完成的。当频繁修改字符串内容时应当使用当前类来完成.
String str="努力学习java";
/*
* 将String转换为StringBuilder,可以使用有参的构造方法
* StringBuilder也有无参构造方法,默认表示空字符串
*/
StringBuilder builder=new StringBuilder(str);
/*
* 从StringBuilder转换为String,使用StringBuilder的toString方法即可
*/
str=builder.toString();
/*
* StringBuilder append(String str)
* 向当前字符串末尾追加指定内容
* 有若干重载方法,参数类型不同,这些重载方法允许追加其他内容(先转换为字符串再追加)
*
* “努力学习java,为了找个好工作!”
*/
builder.append(",为了找个好工作!");
System.out.println(builder.toString());
/*
* StringBuilder replace(int start,int end,String str)
* 将指定范围内的字符串替换为指定的内容。
*
* “努力学习java,为了找个好工作!”改为“努力学习java,就是为了改变世界!”
*
*/
builder.replace(9, 16, "就是为了改变世界");//含头不含尾
System.out.println(builder.toString());
/*
* StringBuilder delet(int start,int end)
* 将当前字符串中指定范围内的内容删除
*
* “努力学习java,就是为了改变世界!”改为“,就是为了改变世界!”
*
*/
builder.delete(0, 8);
System.out.println(builder.toString());
/*
*StringBuilder insert(int index,String str)
*将给定字符串插入到指定位置,原位置及后续字符串顺序向后移动。
*
* “,就是为了改变世界!”改为“活着,就是为了改变世界!”
*/
builder.insert(0, "活着");
System.out.println(builder.toString());
/* 反转字符串
* “活着,就是为了改变世界!”改为“!界世变改了为是就,着活”
*/
builder.reverse();
System.out.println(builder.toString());