通用
public class test{
public static void main(String[] args){
String s1=new String("abx");
String s2="abX";
//内容相等判断
System.out.println(s1.equals(s2));
//大小写的字符串相等判断,验证码
System.out.println(s1.equalsIgnoreCase(s2));
String s3=s1;
//s3和s发生时 共用同一内存地址
//输出true
System.out.println(s1==s3);
//修改后使用不同内存地址
s3="abX";
//输出false
System.out.println(s1==s3);
char x=s1.charAt(2);
//输出'x'
System.out.println(x);
//区分大小写,找不到则返回-1
System.out.println(s3.indexOf("x"));
//输出序列从0开始,输出2
System.out.println(s3.indexOf("X"));
//输出1
System.out.println(s3.indexOf("bX"));
String s4=" x X X x ";
//输出最后一个匹配的字符串所在位置,输出5
System.out.println(s4.lastIndexOf("X"));
//输出"x X X x"
System.out.println(s4.trim());
//用第二个参数,替换字符串中的第一个参数,输出"xXXx"
System.out.println(s4.replace(" ",""));
}
}
字符串拼接
import com.sun.deploy.util.StringUtils;
import java.util.Arrays;
import java.util.List;
/**
* @author ppp
* @date 2019/11/4
**/
public class JoinString {
public static void main(String[] args){
////////////////////////////////////////
//1. 待拼接数组
////////////////////////////////////////
String[] parts={"a","b","c","d","e","f"};
////////////////////////////////////////
//2. 不同的方法
////////////////////////////////////////
////////////////////////////////////////
//使用类库
//2.1 com.sun.deploy.util.StringUtils
//要求第一个入参是java.util下的类型
////////////////////////////////////////
List partl=Arrays.asList(parts);
String result1= StringUtils.join(partl,"-");
System.out.println(result1);
//输出结果为:"a-b-c-d-e-f"
////////////////////////////////////////
//2.2 自己拼接
////////////////////////////////////////
String result2="";
for (int i=0;i<parts.length-1;i++){
result2=result2+parts[i]+"-";
}
result2=result2+parts[parts.length-1];
System.out.println(result2);
}
}
String、StringBuffer和StringBuilder的一些差异
StringBuilder和StringBuffer相较于String:
- 赋值操作前两者是浅拷贝
- 前两者的值是可以改变的,而String修改值时其实是删除旧的对象,讲修改后的结果放入新的对象中,内存地址已经发生变化了
/**
* @author ppp
* @date 2019/11/5
**/
public class BufferString {
public static void main(String[] args) {
/////////////////////////////////////////////
//BufferString
System.out.println("*****************BufferString线程安全的*****************");
/////////////////////////////////////////////
StringBuffer a = new StringBuffer("pppppp");
StringBuffer b=a;
System.out.println(a==b); //输出结果 true
b.append("az");
System.out.println(a); //输出结果ppppppaz
System.out.println(b); //输出结果ppppppaz
System.out.println(a==b); //输出结果true
/////////////////////////////////////////////
//StringBuilder
System.out.println("*****************StringBuilder线程不安全的,性能略高*****************");
/////////////////////////////////////////////
StringBuilder e = new StringBuilder("pppppp");
StringBuilder f=e;
System.out.println(e==f); //输出结果 true
f.append("az");
System.out.println(e); //输出结果ppppppaz
System.out.println(f); //输出结果ppppppaz
System.out.println(e==f); //输出结果true
/////////////////////////////////////////////
//String
System.out.println("*****************String*****************");
/////////////////////////////////////////////
String c = new String("pppppp");
String d=c;
System.out.println(c==d); //输出true
d = c.concat("az");
System.out.println(c); //输出pppppp
System.out.println(d); //输出ppppppaz
System.out.println(c==d); //输出false
}
}
StringBuilder相较于和StringBuffer
- 后者是进程安全的,后者几乎所有的非静态方法都带有 synchronized 关键字

