第十二节:String类【java】
创始人
2024-02-03 13:00:15
0

目录

📘1.1 字符串构造方法

📒1.2 String对象怎样比较

📜1.2.1 引用类型 == 比较的是引用中的地址。

📄1.2.2 boolean equals(Object anObject) 方法:比较怕两个引用所指的对象当中的内容是否一致

📑1.2.3 int compareTo(String s) 方法(比较两个字符串大小的关系)

📃1.2.4 int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

📗1.3 字符串查找

📕1.4 字符串的转换

⌨1.4.1 数字和字符串转换(.valueOf——数字转字符串     .parse___(类型)—— 字符串转数字)

📃1.4.2 字母大小写的相互转换(.toUpperCase()——小写转大写     .toLowerCase() ——大写转小写)

🥎1.4.3 字符串转数组(toCharArray();)

🍀1.4.4 格式化输出

📙1.5 字符串的替换

📁1.5.1 替换不改变字符串本身(.replace)

📁1.5.2 替换所有的指定内容(.replaceAll)

📁1.5.3 替换第一个所指的内容(.replaceFirst)

📒1.6 字符串拆分

🥂1.6.1 String[] split(String regex) —— 将字符串全部拆分

🥂1.6.2 String[] split(String regex, int limit)—— 将字符串以指定的格式,拆分为limit组

🥂1.6.3 拆分IP地址

📘1.7 字符串截取(substring)

🏹1.7.1 String substring(int beginIndex)——从指定索引截取到结尾

🏹1.7.2 String substring(int beginIndex, int endIndex) ——截取部分内容 ——左闭右开,索引从0开始

📗1.8 String trim()、String toUpperCase()、String toLowerCase()

🎎1.8.1 String trim()——去掉字符串中的左右空格,保留中间空格

🎎1.8.2 String toUpperCase()——字符串转大写

🎎1.8.3 String toLowerCase()——字符串转小写

📕1.9 字符串不可在原来位置进行修改

📙1.10 字符串通过拼接对象进行修改

🔥2.字符串的修改

📒2.1 认识StringBuilder和StringBuffer

➕2.1.1 StringBuilder append(String str)——在尾部追加,相当于String的+=

➕2.1.2 StringBuilder reverse() ——反转字符串

📗2.2 .String、StringBuffer、StringBuilder的区别

📕2.3 一道面试题

📙2.4 本章测试题


🌈学习一个类的时候一定要从构造方法开始学习,类的最终目的是实例化对象,那么就一定会构造方法

📘1.1 字符串构造方法

✨首先我们来看一段代码:

public class Test {public static void main(String[] args) {// 使用常量串构造String str1 = "hello";// 直接newString对象String str2 = new String("hello");System.out.println(str1);//helloSystem.out.println(str2);//hello//字符数组,使用字符数字进行构造char[] values = {'a','b','c','d'};String str3 = new String(values);System.out.println(str3);//a b c d}
}

👉总结:

常用的构造方法有三种:

1️⃣使用常量串构造

2️⃣直接newString对象

3️⃣使用字符数字进行构造

目前我们只需要掌握这三种即可,如果想要深入研究,可以打开idea,双击shift,搜索String,点击Classes就可以看到String的各种构造方法

➡️当我们定义了字符串之后,需要注意以下几点:

1️⃣String是引用类型,内部并不存储字符串本身。String 有两个成员变量,不管是带参数的还是不带参数的,都会给 value 赋值

 两个成员变量:value    hash

👆对于以上代码,我们通过调试发现:在java当中,字符串没有所谓的 \0 

String的内存布局

 ➡️并且String 现在是一个类,那么有类就会有很多方法方法

 2️⃣String 类通过 .length() 可以输出字符串长度

public static void main(String[] args) {String str1 = "hello";System.out.println(str1.length());//5}

数组求长度:.length

public static void main(String[] args) {int[] array = {1,2,3,4};System.out.println(array.length);//4}

✨在这里我们要区分:.length() 是一种方法,而 .length 仅仅是一种属性(注意何时加())

3️⃣ .isEmpty() :如果字符串长度为0,返回true,否则返回false

public class Test {String str2 = "";System.out.println(str2.length());//0System.out.println(str2.isEmpty());//true}

➡️拓展:

String str3 = null

str2.isEmpty() 代表它所指向的对象一个字符串都没有

str3 :代表它不指向任何对象

4️⃣在Java中“ ”引起来的也是String类型对象。

// 打印"hello"字符串(String对象)的长度
System.out.println("hello".length());//5

📒1.2 String对象怎样比较

字符串的比较会有两种场景:🕛相不相同🕠大小

📜1.2.1 引用类型 == 比较的是引用中的地址

 public static void main(String[] args) {String str1 = new String("hello");String str2 = new String("hello");System.out.println(str1 == str2);//false:对于引用类型==比较的是引用中的地址。}

📄1.2.2 boolean equals(Object anObject) 方法:比较怕两个引用所指的对象当中的内容是否一致

public static void main(String[] args) {//比较怕两个引用所指的1对象当中的内容是否一致System.out.println(str1.equals(str2));//true:引用中的内容是一样的}

📑1.2.3 int compareTo(String s) 方法(比较两个字符串大小的关系

如果出现不等的字符,直接返回这两个字符的大小差值

public static void main(String[] args) {//比较两个字符串大小的关系String str1 = new String("hello");String str2 = new String("healo");System.out.println(str1.compareTo(str2));//正数}

当 str1 > str2,返回一个正数

当 str1 < str2,返回一个负数

当 str1 = str2,返回0

如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
public static void main(String[] args) {//比较两个字符串大小的关系String str3 = new String("helloabc");String str4 = new String("hello");System.out.println(str3.compareTo(str4));//3}

📃1.2.4 int compareToIgnoreCase(String str) 方法compareTo方式相同,但是忽略大小写比较

    //比较两个字符串大小的关系String str5 = new String("Hello");String str6 = new String("hello");System.out.println(str5.compareToIgnoreCase(str6));//0

📗1.3 字符串查找

    //字符串查找public static void main(String[] args) {String s = "aaabbbcccaaabbbccc";//char charAt(int index)  返回index位置上字符System.out.println(s.charAt(3)); // 'b'//int indexOf(int ch) 返回ch第一次出现的位置,没有返回-1System.out.println(s.indexOf('c')); // 6//int indexOf(int ch, int fromIndex) 从fromIndex位置开始找ch第一次出现的位置,没有 //返回-1System.out.println(s.indexOf('c', 10)); // 15//int indexOf(String str)  返回str第一次出现的位置,没有返回-1System.out.println(s.indexOf("bbb")); // 3//int indexOf(String str, int fromIndex) 从fromIndex位置开始找str第一次出现的位置, //没有返回-1System.out.println(s.indexOf("bbb", 10)); // 12//int lastIndexOf(int ch)  从后往前找,返回ch第一次出现的位置,没有返回-1System.out.println(s.lastIndexOf('c')); // 17//int lastIndexOf(int ch, int fromIndex)  从fromIndex位置开始找,从后往前找ch第一次 //出现的位置,没有返回-1System.out.println(s.lastIndexOf('c', 10)); // 8//int lastIndexOf(String str)  从后往前找,返回str第一次出现的位置,没有返回-1System.out.println(s.lastIndexOf("bbb")); // 12//int lastIndexOf(String str, int fromIndex)  从fromIndex位置开始找,从后往前找str //第一次出现的位置,没有返回-1System.out.println(s.lastIndexOf("bbb", 10)); // 3}

📕1.4 字符串的转换

⌨1.4.1 数字和字符串转换(.valueOf——数字转字符串     .parse___(类型)—— 字符串转数字

    //字符串的转换public static void main(String[] args) {// 数字转字符串String str2 = String.valueOf(123);System.out.println(str2);//123// 字符串转数字String str1 = "123";Integer.parseInt(str1);System.out.println(str1);//123}

📃1.4.2 字母大小写的相互转换(.toUpperCase()——小写转大写     .toLowerCase() ——大写转小写

    public static void main(String[] args) {String str3 = "abcd";String str4 = "ABCD";// 小写转大写System.out.println(str3.toUpperCase());//ABCD//大写转小写System.out.println(str4.toLowerCase());//abcd}

🥎1.4.3 字符串转数组(toCharArray();

    //字符串转数组public static void main(String[] args) {String str5 = "abcdef";char[] array = str5.toCharArray();for (int i = 0; i < array.length; i++) {System.out.print(array[i]);}System.out.println();}

🍀1.4.4 格式化输出

    //格式化public static void main(String[] args) {String s = String.format("%d-%d-%d", 2022,11,20);System.out.println(s);//2022-11-20}

📙1.5 字符串的替换

📁1.5.1 替换不改变字符串本身(.replace)

    public static void main(String[] args) {String str1 = "ababcabcabcd";String ret1 = str1.replace('a','p');//pbpbcpbcpbcdSystem.out.println(ret1);String ret2 = str1.replace('a','0');//0b0bc0bc0bcdSystem.out.println(ret2);}

📁1.5.2 替换所有的指定内容(.replaceAll)

    public static void main(String[] args) {String str1 = "ababcabcabcd";//替换所有的指定内容(replaceAll)String ret3 = str1.replaceAll("ab","666");//666666c666c666cdSystem.out.println(ret3);}

📁1.5.3 替换第一个所指的内容(.replaceFirst)

    public static void main(String[] args) {String str1 = "ababcabcabcd";//替换第一个所指的内容(.replaceFirst)String ret4 = str1.replaceFirst("ab","666");//666abcabcabcdSystem.out.println(ret4);}

📒1.6 字符串拆分

字符串的拆分分为以下两个方法:

🥂1.6.1 String[] split(String regex) —— 将字符串全部拆分

    public static void main(String[] args) {String str1 = "hello little bitter ";String[] strs = str1.split(" ");for (int i = 0; i < strs.length; i++) {System.out.println(strs[i]);//hello       little        bitter}}

🥂1.6.2 String[] split(String regex, int limit)—— 将字符串以指定的格式,拆分为limit组

    public static void main(String[] args) {String str1 = "hello little bitter ";String[] strs = str1.split(" ",2);for (int i = 0; i < strs.length; i++) {System.out.println(strs[i]);//hello       little bitter}}

🥂1.6.3 拆分IP地址

    public static void main(String[] args) {String str1 = "192.168.1.1";String[] strs = str1.split("\\.");for (int i = 0; i < strs.length; i++) {System.out.println(strs[i]);//192      168      1      1}}

➡️在这里我们是按照“ .  ”进行拆分的,为什么要加\\呢?此时不能够识别“ .  ”,必须进行转义

1️⃣字符"|","*","+"都得加上转义字符,前面加上 "\\" . 2️⃣而如果是 "\" ,那么就得写成 "\\\\" . 3️⃣如果一个字符串中有多个分隔符,可以用"|"作为连字符.

📘1.7 字符串截取(substring)

🏹1.7.1 String substring(int beginIndex)——从指定索引截取到结尾

    public static void main(String[] args) {String str = "abcdefg";//String substring(int beginIndex)——从指定索引截取到结尾String s = str.substring(4);System.out.println(s);//efg}

🏹1.7.2 String substring(int beginIndex, int endIndex) ——截取部分内容 ——左闭右开,索引从0开始

    public static void main(String[] args) {String str = "abcdefg";// String substring(int beginIndex, int endIndex) ——截取部分内容 ——左闭右开String str2 = str.substring(2,6);System.out.println(str2);//cdef-----[  )}

📗1.8 String trim()、String toUpperCase()、String toLowerCase()

🎎1.8.1 String trim()——去掉字符串中的左右空格,保留中间空格

    public static void main(String[] args) {String str = "    hello   ab   ";System.out.println(str);//    hello   abString ret = str.trim();System.out.println(ret);//hello   ab}

🎎1.8.2 String toUpperCase()——字符串转大写

    public static void main(String[] args) {String str = "abc";//String toUpperCase()——字符串转大写String ret = str.toUpperCase();System.out.println(ret);//ABC}

🎎1.8.3 String toLowerCase()——字符串转小写

    public static void main(String[] args) {String str2 = "AAAABBBBB";//String toLowerCase()——字符串转小写String ret2 = str2.toLowerCase();System.out.println(ret2);//aaaabbbbb}

📕1.9 字符串不可在原来位置进行修改

✨所有字面值双引号引起的都会放到常量池当中

    public static void main(String[] args) {String str1 = "abcd";String str2 = new String("abcd");System.out.println(str1 == str2);//false}

如果常量池当中存放了“abcd”,就不会再将str2中的“abcd”放入,共用一个体,如果没有则放入

👉总结:双引号 引起来的值就存在字符串常量池当中,如果有,就不存储,直接返回字符串常量池的对象即可

📙1.10 字符串通过拼接对象进行修改

    //字符串如何修改public static void main(String[] args) {String str = "hello";str += "abc";System.out.println(str);//helloabc}

在这里是两个对象拼接形成一个新的对象

🔥2.字符串的修改

 ➡️StringBuffffer 和 StringBuilder 的是为了方便字符串的修改

📒2.1 认识StringBuilder和StringBuffer

➡️StringBuilder和StringBuffffer这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法

➕2.1.1 StringBuilder append(String str)——在尾部追加,相当于String的+=

    public static void main(String[] args) {StringBuilder stringBuilder = new StringBuilder("abc");System.out.println(stringBuilder);//字符串拼接stringBuilder.append("123").append(10);stringBuilder.append(19.9);System.out.println(stringBuilder);}

➕2.1.2 StringBuilder reverse() ——反转字符串

    public static void main(String[] args) {StringBuilder stringBuilder = new StringBuilder("abc");System.out.println(stringBuilder);//字符串逆置stringBuilder.reverse();System.out.println(stringBuilder);//cba}

📗2.2 .String、StringBuffer、StringBuilder的区别

1️⃣String的内容无法修改,而StringBuilder、StringBuffer的内容可以修改

2️⃣StringBuffffer与StringBuilder大部分功能是相似的

3️⃣StringBuffffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

4️⃣String变为StringBuilder: 利用StringBuilder的构造方法或append()方法

5️⃣StringBuilder变为String: 调用toString()方法

📕2.3 一道面试题

🙈以下总共创建了多少个String对象【前提不考虑常量池之前是否存在】
String str = new String("ab"); // 会创建多少个对象
String str = new String("a") + new String("b"); // 会创建多少个对象

第一个代码:

1️⃣双引号ab   2️⃣new String

第二个代码:

1️⃣双引号a    2️⃣双引号b    3️⃣字符串拼接会产生一个StringBuilder 对象    4️⃣赋值给str,调用ToString(),就会创建一个String对象

 

5️⃣new String    6️⃣第二个new String

✨但是题目问的是创建了多少个String对象,则不包括3️⃣字符串拼接会产生一个StringBuilder 对象 ,一共创建了5个String对象

📙2.4 本章测试题

1️⃣字符串中的第一个唯一字符

2️⃣字符串最后一个单词的长度

3️⃣验证回文串

相关内容

热门资讯

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