String字符串拓展贴
创始人
2025-05-31 01:25:01
0

1. String类

在这里插入图片描述

package com.hspedu.string_;public class String01 {public static void main(String[] args) {//1.String 对象用于保存字符串,也就是一组字符序列//2. "jack" 字符串常量, 双引号括起的字符序列//3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节//4. String 类有很多构造器,构造器的重载//   常用的有 String  s1 = new String(); ////String  s2 = new String(String original);//String  s3 = new String(char[] a);//String  s4 =  new String(char[] a,int startIndex,int count)//String s5 = new String(byte[] b)//5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】//                 接口 Comparable [String 对象可以比较大小]//6. String 是final 类,不能被其他的类继承//7. String 有属性 private final char value[]; 用于存放字符串内容//8. 一定要注意:value 是一个final类型, 不可以修改(需要功力):即value不能指向//   新的地址,但是单个字符内容是可以变化String name = "jack";name = "tom";final char[] value = {'a','b','c'};char[] v2 = {'t','o','m'};value[0] = 'H';//value = v2; 不可以修改 value地址}
}

string的不可变指的是底层char数组地址不可变,内容是可变的

2. 两种创建 String 对象的区别

在这里插入图片描述
在这里插入图片描述

3. 字符串的特性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.hspedu.string_;public class StringExercise08 {public static void main(String[] args) {String a = "hello"; //创建 a对象String b = "abc";//创建 b对象//解读//1. 先创建一个 StringBuilder sb = StringBuilder()//2. 执行  sb.append("hello");//3. sb.append("abc");//4. String c= sb.toString()//最后其实是 c 指向堆中的对象(String) value[] -> 池中 "helloabc"String c = a + b;String d = "helloabc";System.out.println(c == d);//真还是假? 是falseString e = "hello" + "abc";//直接看池, e指向常量池System.out.println(d == e);//真还是假? 是true}
}

在这里插入图片描述
在这里插入图片描述

注意方法栈的问题

4. String常用方法

package com.hspedu.string_;public class StringMethod01 {public static void main(String[] args) {//1. equals 前面已经讲过了. 比较内容是否相同,区分大小写String str1 = "hello";String str2 = "Hello";System.out.println(str1.equals(str2));//// 2.equalsIgnoreCase 忽略大小写的判断内容是否相等String username = "johN";if ("john".equalsIgnoreCase(username)) {System.out.println("Success!");} else {System.out.println("Failure!");}// 3.length 获取字符的个数,字符串的长度System.out.println("韩顺平".length());// 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1String s1 = "wer@terwe@g";int index = s1.indexOf('@');System.out.println(index);// 3System.out.println("weIndex=" + s1.indexOf("we"));//0// 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1s1 = "wer@terwe@g@";index = s1.lastIndexOf('@');System.out.println(index);//11System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4// 6.substring 截取指定范围的子串String name = "hello,张三";//下面name.substring(6) 从索引6开始截取后面所有的内容System.out.println(name.substring(6));//截取后面的字符//name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置System.out.println(name.substring(2,5));//llo}
}
package com.hspedu.string_;public class StringMethod02 {public static void main(String[] args) {// 1.toUpperCase转换成大写String s = "heLLo";System.out.println(s.toUpperCase());//HELLO// 2.toLowerCaseSystem.out.println(s.toLowerCase());//hello// 3.concat拼接字符串String s1 = "宝玉";s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");System.out.println(s1);//宝玉林黛玉薛宝钗together// 4.replace 替换字符串中的字符s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";//在s1中,将 所有的 林黛玉 替换成薛宝钗// 老韩解读: s1.replace() 方法执行后,返回的结果才是替换过的.// 注意对 s1没有任何影响String s11 = s1.replace("宝玉", "jack");System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉// 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";//老韩解读:// 1. 以 , 为标准对 poem 进行分割 , 返回一个数组// 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \String[] split = poem.split(",");poem = "E:\\aaa\\bbb";split = poem.split("\\\\");System.out.println("==分割后内容===");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}// 6.toCharArray 转换成字符数组s = "happy";char[] chs = s.toCharArray();for (int i = 0; i < chs.length; i++) {System.out.println(chs[i]);}// 7.compareTo 比较两个字符串的大小,如果前者大,// 则返回正数,后者大,则返回负数,如果相等,返回0// 解读// (1) 如果长度相同,并且每个字符也相同,就返回 0// (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小//     就返回 if (c1 != c2) {//                return c1 - c2;//            }// (3) 如果前面的部分都相同,就返回 str1.len - str2.lenString a = "jcck";// len = 3String b = "jack";// len = 4System.out.println(a.compareTo(b)); // 返回值是 'c' - 'a' = 2的值
// 8.format 格式字符串/* 占位符有:* %s 字符串 %c 字符 %d 整型 %.2f 浮点型**/String name = "john";int age = 10;double score = 56.857;char gender = '男';//将所有的信息都拼接在一个字符串.String info ="我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!";System.out.println(info);//解读//1. %s , %d , %.2f %c 称为占位符//2. 这些占位符由后面变量来替换//3. %s 表示后面由 字符串来替换//4. %d 是整数来替换//5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理//6. %c 使用char 类型来替换String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";String info2 = String.format(formatStr, name, age, score, gender);System.out.println("info2=" + info2);}
}

5. StringBuffer 类

5.1 基本介绍

在这里插入图片描述

package com.hspedu.stringbuffer_;public class StringBuffer01 {public static void main(String[] args) {//解读//1. StringBuffer 的直接父类 是 AbstractStringBuilder//2. StringBuffer 实现了 Serializable, 即StringBuffer的对象可以串行化//3. 在父类中  AbstractStringBuilder 有属性 char[] value,不是final//   该 value 数组存放 字符串内容,引出存放在堆中的//4. StringBuffer 是一个 final类,不能被继承//5. 因为StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)//   不用每次都更换地址(即不是每次创建新对象), 所以效率高于 StringStringBuffer stringBuffer = new StringBuffer("hello");}
}

5.2 String VS StringBuffer

在这里插入图片描述

5.3 String 和 StringBuffer 相互转换

package com.hspedu.stringbuffer_;public class StringAndStringBuffer {public static void main(String[] args) {//看 String——>StringBufferString str = "hello tom";//方式1 使用构造器//注意: 返回的才是StringBuffer对象,对str 本身没有影响StringBuffer stringBuffer = new StringBuffer(str);//方式2 使用的是append方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);//看看 StringBuffer ->StringStringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");//方式1 使用StringBuffer提供的 toString方法String s = stringBuffer3.toString();//方式2: 使用构造器来搞定String s1 = new String(stringBuffer3);}
}

5.4 StringBuffer 类常见方法

package com.hspedu.stringbuffer_;
public class StringBufferMethod {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello");//增s.append(',');// "hello,"s.append("张三丰");//"hello,张三丰"s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"System.out.println(s);//"hello,张三丰赵敏100true10.5"//删/** 删除索引为>=start && 

5.5 测试

package com.hspedu.stringbuffer_;public class StringBufferExercise01 {public static void main(String[] args) {String str = null;// okStringBuffer sb = new StringBuffer(); //oksb.append(str);//需要看源码 , 底层调用的是 AbstractStringBuilder 的 appendNullSystem.out.println(sb.length());//4System.out.println(sb);//null//下面的构造器,会抛出NullpointerExceptionStringBuffer sb1 = new StringBuffer(str);//看底层源码 super(str.length() + 16);System.out.println(sb1);}
}

注意添加null时的情况

6. StringBuilder 类

6.1 基本介绍

在这里插入图片描述

package com.hspedu.stringbuilder_;public class StringBuilder01 {public static void main(String[] args) {//解读//1. StringBuilder 继承 AbstractStringBuilder 类//2. 实现了 Serializable ,说明StringBuilder对象是可以串行化(对象可以网络传输,可以保存到文件)//3. StringBuilder 是final类, 不能被继承//4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder的 char[] value;//   因此,字符序列是堆中//5. StringBuilder 的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用//   StringBuilderStringBuilder stringBuilder = new StringBuilder();}
}

6.2 StringBuilder 常用方法

在这里插入图片描述

7. String、StringBuffer 和 StringBuilder 的比较

在这里插入图片描述

7.1 效率测试

package com.hspedu.stringbuilder_;public class StringVsStringBufferVsStringBuilder {public static void main(String[] args) {long startTime = 0L;long endTime = 0L;StringBuffer buffer = new StringBuffer("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {//StringBuffer 拼接 20000次buffer.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuffer的执行时间:" + (endTime - startTime));StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {//StringBuilder 拼接 20000次builder.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuilder的执行时间:" + (endTime - startTime));String text = "";startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {//String 拼接 20000text = text + i;}endTime = System.currentTimeMillis();System.out.println("String的执行时间:" + (endTime - startTime));}
}

7.2 String、StringBuffer 和 StringBuilder 的选择

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...