JAVA字符串相关

it2023-12-24  65

字符串本质是char[]类型的数组。

分类

不可变字符串String:定义好之后不能再修改,要修改只能创建新的内存地址可变字符串:定义好之后还可以进行修改,改变时不会创建新的地址。 可变字符串有StringBuilder和StringBuffer。String、StringBuilder和StringBuffer都实现了CharSequence接口。

String创建

直接赋值 String str = "lala"; 要么创建一个对象,要么不创建; 会先到常量池中看一下有没有存在该字符串常量,如果已经有了,就直接使用,不会创建新的地址;如果常量池中没有,就会在常量池中创建一个对象。通过构造器来创建 String str2 = new String("lala"); 至少要创建一个对象,因为使用了new必然要在堆中创建一个对象。 创建时在常量池中查找有没有传入的字符串常量,如果没有,创建一个字符串常量放到常量池中。

字符串对象值为空

表示引用为空, String str = null; 还没有初始化,没有被分配内存空间。表示空字符串, String str = ""; 已经创建了对象,已经分配了内存,内容为空。

字符串的比较

比较两个字符串相不相等

== 比较两个字符串地址是否相等使用equals(),它的逻辑是先比较两个字符串地址是否相等,若相等则字符串相等;若不相等,则判断该变量是否为字符串类型变量,若是再逐个字符比较。 (建议子类根据自己的需求去覆盖equals方法)

字符串编译优化

凡是单独使用""引用起来的,都是直接量,在编译时期就已经确定好了。

String str = "ABCD"; String str = "A"+"B"+"C"+"D"; String str = "AB"+"CD";

编译之后都是String str = "ABCD";

字符串常用方法

char数组转换成字符串 char[] cs = new char[]{'A','B','C'}; String str = new String(cs); 字符串转换成char类型数组 char[] cs2 = str.toCharArray(); 获取字符串中的信息 String str2 = "ialxh"; //返回字符串长度 System.out.println(str2.length()); //获取字符串当中的某一个字符 System.out.println(str2.charAt(2)); //返回一个子字符串在字符串第一次出现中的位置 String str3 = "ABCDEFCDG"; String str4 = "CD"; System.out.println(str3.indexOf(str4)); //返回一个子字符串在字符串最后一次出现中的位置 System.out.println(str3.lastIndexOf(str4)); 大小写转换 //小写字母转换成大写 str.toUpperCase(); //大写字母转换成小写 str.toLowerCase(); 忽略大小写判等 str4.equalsIgnoreCase(str5); 字符串截取 //字符串分割 String fileNames = "abc.java;hello.myxq;hello.txt.java;hello.class"; String[] res = fileNames.split(";"); System.out.println(Arrays.toString(res)); //判断每一个元素是否以hello开头 //遍历数组 for(String name : res){ //System.out.println(name); //是否以hello开头 //判断字符串是否以指定字符串开头 if(name.startsWith("hello")){ //从最后一个点. 获取最后一个点的位置 int index = name.lastIndexOf("."); //截取字符串 String newName = name.substring(index); System.out.println(name); } } 把一个单词的首字母变成大写 String name = "mashroom"; //1.获取第一个字母 String res = name.substring(0,1); //2.把获取的第一个字母变成大写 res = res.toUpperCase(); //3.获取除第一个字母的后面所有内容 String lastString = name.substring(1); //4.把大写字母与其拼接 System.out.println(res+lastString); 去掉字符串中的空格 //去空格 //1.去掉首尾的空格 String s = " mash room "; s = s.trim();//去掉首尾的空格 //2.去掉所有的空格 s = s.replace(" ","");//用一个新字符去代替老字符 String str1 = ""; String str2 = null; String str3 = " "; if(str3 != null && !"".equals(str3)){ System.out.println("不为空"); }else{ System.out.println("为空"); }

字符串拼接耗时

String > StringBuffer > StringBuilder StringBuilder : 没有synchronized,效率更高 StringBuffer : 方法前面多了synchronized,加锁,更安全,效率相对低一些

最新回复(0)