String字符串
1.字符串的比较
public class Demo01 {
public static void main(String[] args) {
String a="test";
String b="test";
System.out.println(a==b);//true,test放在堆中的常量池中
String testa = new String("test1");
String testb = new String("test1");
System.out.println(testa==testb);//false
}
}
3.String的方法
3.1简单方法
public class Demo02 {
public static void main(String[] args) {
String a="tesT测试";
System.out.println(a.length());//字符数 6
System.out.println(a.isEmpty());//判空 false
String b="";//空字符串,在常量池有地址
System.out.println(b.isEmpty());//true
String bb=" ";
System.out.println(bb.isEmpty());//false
//String c=null;//空对象,无地址
//System.out.println(c.isEmpty());//NullPointerException
System.out.println(a.startsWith("t"));//以字符串开始 true
System.out.println(a.endsWith("试"));//以字符串结束 true
System.out.println(a.toUpperCase());//转大写 TEST测试 将常量池中的a复制一份然后大写,并不改变原来a的值
System.out.println(a.toLowerCase());//转小写 test测试
System.out.println(a);//还是刚开始定义的a tesT测试
}
}
3.2字符串查找方法
import java.util.UUID;
public class Demo03 {
public static void main(String[] args) {
String a = "test测试test";
System.out.println(a.charAt(2));//String底层是一个char型数组,返回指定下标的字符 s
System.out.println(a.indexOf("s"));//根据指定字符串查找第一次出现此字符串的下标,查不到返回-1 2
System.out.println(a.indexOf("s",4));//从指定位置查找出现指定字符串下标 8
System.out.println(a.lastIndexOf("s"));//最后一次出现指定字符串的下标 8
System.out.println(a.substring(4));//从指定下标截取字符串到末尾 测试test
System.out.println(a.substring(4,6));//从指定下标截取指定长度的字符串(含头不含尾) 测试
System.out.println("======截取.jpg,并新生成一个文件名");
String fileName="1.2.3.4.5.jpg";
int i = fileName.lastIndexOf(".");
System.out.println(i);//最后一次出现.的下标 9
String uuid = UUID.randomUUID().toString();//随机生成文件名
System.out.println(uuid);//5058b8cf-4643-4aeb-821b-bf6fc42593cf
String substring = fileName.substring(i);//.jpg
System.out.println(uuid+substring);//5058b8cf-4643-4aeb-821b-bf6fc42593cf.jpg
}
}
3.3字符串的转换方法
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Demo04 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "test测试";//utf-8 中文占三个字节,gbk中文占两个字节
byte[] bytes = str.getBytes();//将字符串转换为byte数组
System.out.println(Arrays.toString(bytes));//[116, 101, 115, 116, -26, -75, -117, -24, -81, -107] ,当前为utf-8 格式
String gbk = new String(bytes, "GBK");//给指定的字符串重新编码,编码不能随便转换,可能会出现乱码(utf-8转gbk相当于3个字节转2个字节)
System.out.println(gbk);//test娴嬭瘯
}
}
3.4字符串是否包含,替换,拼接,分割,去除空格
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
String str="test测试test";
System.out.println(str.contains("e"));//true 是否包含指定字符串
System.out.println(str.replace("test","测试"));//测试测试测试 全部替换指定字符串
System.out.println(str.replaceAll("test","测试"));//测试测试测试 全部替换指定字符串,支持正则
System.out.println(str.replaceFirst("test","测试"));//测试测试test 替换首次出现的指定字符串,支持正则
System.out.println(str.concat("aaa"));//test测试testaaa 在字符串的后面拼接
str.concat("a");
str.concat("b");
System.out.println(str);//test测试test str.concat()只是复制了一份str拼接为新的字符串后放到了常量池,并不改变原来的str,除非重新赋值,如下;
str = str.concat("a");
str = str.concat("b");
System.out.println(str);//test测试testab 这种方法会造成资源的浪费,因为复制了很多中间值在常量池
String str1="t-e-s-t";
String[] split = str1.split("-");//字符串的分割
System.out.println(Arrays.toString(split));//[t, e, s, t]
String str2=" te st ";
System.out.println("--"+str2.trim()+"--");//--te st-- 去除开始和结束位置的空格
}
}
3.5 字符串的比较
public class Demo06 {
public static void main(String[] args) {
String str="abc";//常量池中
String str2="abc";//常量池中
System.out.println(str==str2);//==比较的是地址 true
System.out.println(str.equals(str2));//equals比较的是值 true
String str3="ABc";
System.out.println(str.compareTo(str3));//比较时不忽略大小写 32
System.out.println(str.compareToIgnoreCase(str3));//比较时忽略大小写 0
String str4="abc1";
System.out.println(str.compareTo(str4));//-1 compareTo按照最小长度依次比较字符串,如果都相同,长度相减
}
}
//compareTo源码
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
String字符串