String
字符串类型: 一组字符类型(不可变的串)
创建方法:
new String();
new String("abd");
"JAVA";
new String(buf,2,2);//通过字节数组创建
常用方法:
String 构造器
//1.
String str = new String();//创建了一个""对象
System.out.println(str);
//2.
String str1 = "love";
//3.
String str2 = "";
//比较一下str和str2的值
System.out.println(str==str2);//false
System.out.println(str==str2);//true
按照字节数组创建字符串对象
byte[] buf = new byte[] {65,66,67,68,69};
String str4 = new String(buf);
System.out.println("通过字节数组创建字符串:"+str4);
//通过字节数组创建字符串:ABCDE
str4 = new String(buf,2,2);
System.out.println("通过字节数组创建字符串:"+str4);
//通过字节数组创建字符串:CD
str4 = new String(buf,2,2,"UTF-8");
System.out.println("通过字节数组创建字符串:"+str4);
按照代码点创建字符串对象
int[] ins = new int[] {88,89,100,99};
String str4 = new String(ins,0,4);
System.out.println("按照代码点创建字符串对象:"+str4);
//按照代码点创建字符串对象:XYdc
按照字符串对象创建字符串对象
String str5 = new String("abc");
System.out.println(str5);
//abc
常见方法
public class Test02 {
public static void main(String[] args) {
// 创建一个String对象
String str = "ilovejava";
//charAt(int index);
char ch = str.charAt(3);
System.out.println("返回当前索引位置上的指定字符:"+ch);
//codePointAt(index)
int num = str.codePointAt(0);
System.out.println("返回指定索引位置上元素的代码点:"+num);
//
//compareTo(String)
String cStr = "ilovejava";
num = str.compareTo(cStr);
System.out.println("比较两个字符串的大小:"+num);
//compareToIgronCase(String)
cStr = "ILOVEJAVA";
num = str.compareToIgnoreCase(cStr);
System.out.println("比较两个字符串的大小(忽略大小写):"+num);
//concat(String)
cStr = "andgirl";
str = str.concat(cStr);
System.out.println("拼接之后的结果是:"+str);
//输出ilovejavaandgirl
//copyValueOf(char[])
char[] chs = new char[] {'i','l','o','v','e'};
str = String.copyValueOf(chs);
System.out.println("创建新的字符串:"+str);
str = String.copyValueOf(chs,1,4);
System.out.println("创建新的字符串:"+str);
//输出 love
str = "憨憨.avi";
boolean flag = str.endsWith(".avi");
System.out.println("str是否是.avi格式:"+flag);
//输出 1
//getBytes
byte[] buf = str.getBytes();
System.out.println("获取字符串的字节数组:"+Arrays.toString(buf));
//getChars();
chs = new char[10];
// 从str的2索引处开始 到str的第5个索引结束(不包含第6个) 复制到chs字符数组中 从第1个位置开始
str.getChars(2,6, chs, 1);
System.out.println("获取字符串的字符数组:"+Arrays.toString(chs));
//indexOf 返回负数代表未找到
str = "hehe.avi.png";
int index = str.indexOf(".");
System.out.println(".在string中第一次出现的位置是:"+index);
index = str.indexOf(100);
System.out.println("e在string中第一次出现的位置是:"+index);
index = str.indexOf(".",5);
System.out.println(".在string中第5个索引位置开始计算,第一次出现的位置是:"+index);
index = str.lastIndexOf(".");
System.out.println(".在string中最后一次出现的位置是:"+index);
//isEmpty()
System.out.println("查看数组是否为null:"+str.isEmpty());
//repleace
str = "hehe.avi.png";
str = str.replace(".", "+");
System.out.println("替换之后的结果:"+str);
//splite:
str = "login?unme=zs&pwd=zs";
String[] strs = str.split("\\?");
for(String string:strs) {
System.out.println(string);
}
System.out.println("======");
String parms = strs[1];
strs = parms.split("&");
for(String string:strs) {
String[] ss = string.split("=");
System.out.println(ss[1]);
}
//subString
str = "login?unme=zs&pwd=zs";
str = str.substring(4);// 从4索引开始截取到结束
System.out.println("截取字符串:"+str);
str = str.substring(2, 7);//从2索引开始截取 到索引为7结束不包含7
System.out.println("截取字符串:"+str);
//大小写转换
str = "login?unme=zs&pwd=zs";
str = str.toUpperCase();
System.out.println("转为大写:"+str);
str = str.toLowerCase();
System.out.println("转为小写:"+str);
//通过静态方法创建String对象
String str1 = String.valueOf(123);
System.out.println(str1);
//对象转字符串 其实就是调用当前对象的toString方法
User u = new User(10);
String str2 = String.valueOf(u);
System.out.println(str2);
}
}
StringBuffer和StringBuilder:
原理:两者都可变是因为其底层就是一个字符数组,动态数组
StringBuilder是在1.5之后才有的
StringBuffer和StringBuilder都继承自AbstractStringBuilder
但是StringBuffer 效率性地狱StringBuilder
相反 StringBuilder 安全性要比StringBuffer高
一般情况下使用StringBuilder
jdk9之后, String中存储数据通过byte数组存储+变量
jdk中‘对于存储是的内容消耗极大降低
public class Test04 {
public static void main(String[] args) {
// 创建StringBuffer
StringBuffer sb = new StringBuffer();
//StringBuilder sb = new StringBuilder();
// 容量16
System.out.println("通过空构造器创建的StringBuffer的容量:"+sb.capacity());
//添加元素
sb.append(true);
sb.append(false).append("123").append("134");// 链式编程
System.out.println(sb);
System.out.println("当前sb对象中的字符串长度:"+sb.length());
//添加元素
sb.insert(1, "java");
System.out.println(sb);
}
}