第十二节:String类【java】

news2024/12/28 4:05:56

目录

📘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);//hello
        System.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());//0
        System.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第一次出现的位置,没有返回-1
        System.out.println(s.indexOf('c')); // 6
        //int indexOf(int ch, int fromIndex) 从fromIndex位置开始找ch第一次出现的位置,没有 
        //返回-1
        System.out.println(s.indexOf('c', 10)); // 15
        //int indexOf(String str)  返回str第一次出现的位置,没有返回-1
        System.out.println(s.indexOf("bbb")); // 3
        //int indexOf(String str, int fromIndex) 从fromIndex位置开始找str第一次出现的位置, 
        //没有返回-1
        System.out.println(s.indexOf("bbb", 10)); // 12
        //int lastIndexOf(int ch)  从后往前找,返回ch第一次出现的位置,没有返回-1
        System.out.println(s.lastIndexOf('c')); // 17
        //int lastIndexOf(int ch, int fromIndex)  从fromIndex位置开始找,从后往前找ch第一次 
        //出现的位置,没有返回-1
        System.out.println(s.lastIndexOf('c', 10)); // 8
        //int lastIndexOf(String str)  从后往前找,返回str第一次出现的位置,没有返回-1
        System.out.println(s.lastIndexOf("bbb")); // 12
        //int lastIndexOf(String str, int fromIndex)  从fromIndex位置开始找,从后往前找str 
        //第一次出现的位置,没有返回-1
        System.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');//pbpbcpbcpbcd
        System.out.println(ret1);

        String ret2 = str1.replace('a','0');//0b0bc0bc0bcd
        System.out.println(ret2);
    }

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

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

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

    public static void main(String[] args) {
        String str1 = "ababcabcabcd";
        //替换第一个所指的内容(.replaceFirst)
        String ret4 = str1.replaceFirst("ab","666");//666abcabcabcd
        System.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   ab
        String 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 .StringStringBufferStringBuilder的区别

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

2️⃣StringBufffferStringBuilder大部分功能是相似的

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️⃣验证回文串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业级nginx使用

企业级nginx使用 nginx实现平滑升级 [rootlnmp nginx-1.16.0]# cd /usr/local/nginx/sbin/ [rootlnmp sbin]# ls nginx nginx.old [rootlnmp sbin]# ./nginx -v nginx version: nginx/1.16.0 [rootlnmp sbin]# ./nginx.old -v nginx version: nginx/1.14.2 [rootlnmp sbin]#操…

物联网开发笔记(49)- 使用Micropython开发ESP32开发板之控制RGB全彩LED模块

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制RGB全彩LED模块。 二、环境 ESP32 RGB全彩LED模块 Thonny IDE 几根杜邦线 1&#xff0c;共阴极接线方法 2&#xff0c;共阳极接线方法 三、代码 1&#xff0c;亮指定的颜色&#xff0c;比如百度蓝。 我们使用取色…

万字长文,精美插图,带你玩转redis

资料下载&#xff1a; 链接: https://pan.baidu.com/s/1ue4Bnv4b4ifp0S0I_yOJ_w?pwdd9x9 提取码: d9x9 Redis学习笔记 1. 认识Redis 1.1 什么是NoSQL&#xff1f; SQL是关系型数据库&#xff0c;NoSQL是非关系型数据库 下面是几种非关系型数据库及其优缺点和应用场景。 分类…

[附源码]java毕业设计网上书店系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【分隔结构】动宾分离

动宾分离 动词 宾语 状语&#xff1a;如果宾语较长&#xff0c;状语较短&#xff0c;会转化为 动词 状语 宾语 While I disapprove of what you say, I would defend to the death your right to say it. 名词 引导词 主语 及物动词 You are the man that I will marry…

【K8S】学习笔记(一)

K8S学习笔记一、Kubernetes1.1、K8S功能1.2、K8S架构组件1.2.1、架构细节1.3、K8S核心概念1.3.1、Pod1.3.2、Volume1.3.3、Controller1.3.4、Deployment1.3.5、Service1.3.6、Label1.3.7、Namespace1.3.8、API二、搭建K8S2.1、K8S搭建规划2.1.1、单master集群2.1.2、多master集…

Html5的新增特性

Html5的新增特性主要是针对以前的不足&#xff0c;增加了一些新的标签&#xff0c;新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 声明&#xff1…

m基于迫零ZF准则的通信均衡器的matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 在数字通信系统中&#xff0c;码间串扰和加性噪声是造成信号传输失真的主要因素&#xff0c;为克服码间串扰&#xff0c;在接收滤波器和抽样判决器之间附加一个可调滤波器&#xff0c;用…

STM32CubeMX:串口DMA

DMA&#xff1a;直接储存区访问&#xff0c;DMA传输将数据从一个地址空间复制到另一个空间。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场过程&#xff0c;通过硬件为RAM何IO设备开辟一条直接传输数据的通道&#xff0c;从而可以提高C…

WSL下安装ubuntu 18.04 +meep进行FDTD仿真计算

WSL下安装ubuntu 18.04 meep进行FDTD仿真计算前言WSL安装过程打开虚拟环境下载Ubuntu并修改安装路径更改软件源MeepVScode远程访问测试程序前言 使用meep进行FDTD开发&#xff0c;开源。这里记录一下自己的安装过程&#xff0c;可以不安装在C盘&#xff0c;有助于后面进行修改…

【JVM】java的jvm类加载器和类加载子系统

JVM类加载器和类加载子系统一、JVM体系结构二、ClassLoader类介绍三、类加载子系统3.1 加载阶段3.1.1 引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;3.1.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;3.1.3 应用程序类加载器&#xff08;Applica…

Android入门第32天-Android中的Alert Dialog的使用大全

写在我的第200篇博客中的“前言” 这篇是我的第200篇博客。落笔写正文前我感触彼深。自从一个小P孩那时写博客只是为了一时的好玩&#xff0c;到逐步发觉只有让越来越多的人理解了技术&#xff0c;把技术普及到门槛越来越低&#xff0c;才会反推技术人员的处镜越来越好。因为必…

Allegro如何输出STP文件操作指导

Allegro如何输出STP文件操作指导 Stp文件用于查看实物,Allegro支持输出STP格式的文件,下面介绍如何输出,操作步骤如下 选择File-export-STEP 根据自己的需要选择参数 如果需要输出电气过孔,选electronic hole,需要外层铜皮,勾选External Copper 常规默认值就可以了,…

UE5笔记【六】流明引擎Lumen简介;Lumen处理发光物体。

RealTimeGlobal illumination System。实时全局照明系统。 打开Lumen 从设置中&#xff0c;打开【项目设置】往下找【渲染Render】 然后再GI中将途中两项选择为Lumen。 同时需要一个后期处理量PostProcessVolume。刚好场景中有。 需要勾选【全局光照GI】中的【方法】选定为【…

Spring七天速成:入门必看(二)

-----持续更新Spring入门系列文章----- 如果你也喜欢Java和算法&#xff0c;欢迎订阅专栏共同学习交流&#xff01; 你的点赞、关注、评论、是我创作的动力&#xff01; -------希望我的文章对你有所帮助-------- 前言&#xff1a; 在前篇文章当中我们已经大概了解了Spring的…

QT布局之QGridLayout嵌套QHBoxLayout

搞嵌入式系统开发的&#xff0c;往往都是真全栈开发者。从硬件到驱动到操作系统到应用以及功能界面&#xff0c;是哪里需要搞哪里。这不&#xff0c;最近需要开发一个基于QT的界面功能&#xff0c;涉及到控件布局。因为不熟悉&#xff0c;走了一些弯路。这里将相关调试记录下来…

计算机网络面试题【面试】

计算机网络面试题前言OSI 七层网络模型应用层表示层会话层传输层网络层数据链路层物理七层总结输入URL后会发生什么1. DNS域名解析2. 三次握手建立TCP连接3. 发送HTTP网络请求4. 服务器处理请求5. 服务器返回响应6. 四次挥手断开TCP连接7. 解析HTMLDNS解析过程DNS解析&#xff…

Froala Editor JavaScript WYSIWYG HTML 编辑器

Froala Editor JavaScript WYSIWYG HTML 多用途、易于使用的 WYSIWYG 编辑器&#xff0c;优雅 每次点击&#xff0c;我们都会让网络编辑变得更简单、更强大、更愉快 安全、快速、智能和稳健。 Froala Editor 是一个 用 JavaScript 编写 的轻量级 WYSIWYG HTML 编辑器&#xff0…

【计算机毕业设计】小型OA系统设计与实现Springboot

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括小型OA系统设计与实现的网络应用&#xff0c;在国外小型OA系统设计与实现已经是很普遍的方式&#xff0c;不…

G1D17-研究方向rce45-49不快乐就去敲敲代码

现在每天晚上都觉得一天结束的好快呀~每天早上都很幸福&#xff0c;因为还有一天的时间呐&#xff01;&#xff01;&#xff01; 今天主要的事情是完成老师的作业——论文主题阅读的report&#xff0c;看一下动态规划&#xff08;emm最近喜欢啃这种让人掉头发的问题~&#xff0…