String类讲解(1)

🐵本篇文章将讲解String类及其包含的方法


一、介绍String类

String属于引用类型,String类是Java的一个内置类,用于表示字符串,String类中具有许多方法,可以用来操作和处理字符串

二、字符串的构造

下面介绍三种构造字符串的方法:

public static void main(String[] args) {
    //1.使用常量串直接赋值
    String str = "hello";
    System.out.println(str); //hello

    //2.使用new关键字创建字符串对象
    String str1 = new String("world");
    System.out.println(str1); //world

    //3.通过字符数组构造字符串
    char[] arr = {'a', 'b', 'c'};
    String str = new String(arr);
    System.out.println(str); //abc

}

以上述代码的第二个例子为例画图讲解:

求字符串的长度和判断字符串是否为空:

public static void main(String[] args) {
    String str1 = "hello";
    System.out.println(str1.length()); //计算字符串str1的长度

    String str4 = "";
    System.out.println(str4.isEmpty()); 
    //判断引用所指向的对象的内容是否为空,若为空返回true,否则返回false

    String str5 = null;
    System.out.println(str5.isEmpty()); //空指针异常
}

三、字符串比较

3.1 ==

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);

由于s1和s2都属于引用类型,所以上述代码实际比较的是s1和s2引用的对象的地址,打印结果为false

但是在以下这种情况会返回true,这涉及到了字符串常量池,以后会讲

String s3 = "hello";
String s4 = "hello";
System.out.println(s3 == s4); //字符串常量池

3.2 boolean equals(Object o)方法

equals方法是Object类中的方法,在Object类中equals方法的功能就是比较两个对象的地址,而在String类中重写了equals方法,其功能是比较字符串对象的内容,若相等返回true,否则返回false

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2)); //true

3.3 int compareTo(String s)方法

该方法和C语言中strcmp函数功能基本一致

        String s1 = new String("abc");
        String s2 = new String("abcd");
        String s3 = new String("azc");

        System.out.println(s1.compareTo(s2)); //-1(字符数的差)
        //1.s1>s2 返回一个大于0的数(s1的ASCII值减去s2的ASCII值)
        //2.s1<s2 返回一个大于0的数(s1的ASCII值减去s2的ASCII值)
        //3.s1=s2 返回0
        System.out.println(s1.compareTo(s3)); //-24

3.4 int compareToIgnoreCase(String s)方法

比较两个字符串但忽略大小写

String s1 = new String("hello");
String s2 = new String("HELLO");
System.out.println(s1.compareToIgnoreCase(s2)); //true

四、字符串查找

<方法> char charAt(int index)

<功能>返回字符串下标为index的字符,如果index为负数或导致越界,则抛出异常

String s1 = new String("hello");
System.out.println(s1.charAt(2)); //l

<方法> int indexOf(int ch)

<功能> 返回ch第一次出现的下标,如果字符串中没有ch则返回-1

String s1 = new String("hello");
int index = s1.indexOf('e');
System.out.println(index); //1

<方法> int indexOf(int ch, int fromIndex)

<功能> 从下标为fromIndex的位置处开始找ch,返回ch第一次出现的下标,若没有则返回-1

String s1 = new String("hello");
int index = s1.indexOf('l', 3);
System.out.println(index); //3

<方法> int indexOf(String str)

<功能> 返回str第一次出现的位置,没有则返回-1,和C语言的strstr用法基本一样

String s = new String("abcdbcd");
int index = s.indexOf("bcd"); //1

<方法> int indexOf(String str, int fromIndex)

<功能> 从fromIndex位置开始找str第一次出现的位置并返回,没有则返回-1

String s = new String("abcdefabc");
int index = s2.indexOf("abc", 3);
System.out.println(index); //6

<方法> int lastIndexOf(int ch)

<功能> 从后往前找,返回ch第一次出现的位置,没有返回-1

String s2 = new String("hello");
int i = s2.lastIndexOf('l'); //3

<方法> int lastIndexOf(int ch, int fromIndex)

<功能> 从fromIndex位置开始从后往前找,返回ch第一次出现的位置,没有返回-1

String s2 = new String("hello");
int i = s2.lastIndexOf('l', 2); //2

<方法> int lastIndexOf(String s)

<功能> 从后往前找,返回字符串第一次出现的位置,没有返回-1

String s2 = new String("abcdefabc");
int i = s2.lastIndexOf("abc");
System.out.println(i); //6

<方法> int lastIndexOf(String s, int fromIndex)

<功能> 从fromIndex位置开始从后往前找从后往前找,返回字符串s第一次出现的位置,没有返回-1

String s2 = new String("abcdefabc");
int i = s2.lastIndexOf("abc", 3);
System.out.println(i); //0

五、字符串转化

5.1 数字与字母之间的转化

//数字转换为字符串
String s1 = String.valueOf(100);
String s2 = String.valueOf(12.4);
String s3 = String.valueOf(true);
System.out.println(s1 +' '+ s2 +' '+ s3); //100 12.4 true 这些都为字符串
        
//字符串转换为数字
int i = Integer.parseInt("123"); //Integer为包装类型,后面会讲
double d = Double.parseDouble("3.14");
System.out.println(i);
System.out.println(d);

5.2 大小写转换

String s = new String("hello");
String ret = s.toUpperCase();
System.out.println(ret); //HELLO

String s1 = new String("HeLLO");
String ret1 = s1.toLowerCase();
System.out.println(ret1); //hello

//若要转换的字符串不是字母,则原样输出

5.3 字符串与数组之间的转换

//字符串转换为数组
String s = new String("hello");
char[] ch = s.toCharArray();
//遍历并打印数组
for (char c : ch) {
    System.out.print(c);
}

//数组转换为字符串
s = new String(ch);
System.out.println(s);

六、字符串替换

String s1 = new String("hehello");
String ret = s1.replaceAll("he", "aa"); //将字符串章所有的he替换为aa
System.out.println(ret); //aaaallo

String ret1 = s1.replaceFirst("he", "aa"); //将字符串中第一个he替换为aa
System.out.println(ret1); //aahello

七、字符串拆分

<方法> String[] split(String regex)

<功能>以regex为分隔符,将整个字符串拆分,若字符串中没有该分隔符则原样输出

String s = new String("undertale&Sans");
String[] ret = s.split("&"); //返回类型为String[]
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] +" "); //undertale Sans
}

<方法> String[] split(String regex, int limit)

<功能>以regex为分隔符,将整个字符串拆分为limit组,若字符串中没有该分隔符则原样输出

String s1 = new String("hello world hello Sans");
String[] ret1 = s1.split(" ", 3); //分成3部分
for (int i = 0; i < ret1.length; i++) {
    System.out.println(ret1[i]);
}

<特殊1>若分隔符为". * +",则要进行转义,在前面加上\\

String s = new String("192.168.1.1");
String[] ret = s1.split("\\."); 
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] +" "); //192 168 1 1
}

<特殊2>

String s1 = new String("192\\168\\1\\1");
String[] ret = s1.split("\\\\"); 
for (int i = 0; i < ret.length; i++) {
    System.out.print(ret[i] + " "); //192 168 1 1
}

<特殊3>若有多个分隔符,则可以用 "|" 将分隔符隔开

String s2 = new String("name=Sans&age=18");
String[] ret3 = s2.split("=|&");
for (int i = 0; i < ret3.length; i++) {
    System.out.print(ret3[i] +" "); //name Sans age 18
}

八、字符串截取

<方法> String subString(int beginIndex)

<功能> 从beginIndex开始截取到字符串结尾

String str = new String("abcdef");
String ret = str.substring(2); // cdef

<方法> String subString(int beginIndex, int endIndex)

<功能> 以区间[beginIndex, endIndex)截取字符串

String str = new String("abcdef");
String ret = str.substring(2, 5); // cde

<其他> String trim()

<功能> 删除字符串开头和结尾的空格

String str = "   abc d f    ";
System.out.println(str);
String ret = str.trim();
System.out.println("["+ ret +"]");


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【序列推荐】MAN:跨领域顺序推荐的混合注意网络

#论文题目&#xff1a;MAN&#xff1a;Mixed Attention Network for Cross-domain Sequential Recommendation&#xff08;跨领域顺序推荐的混合注意网络&#xff09; #论文地址&#xff1a;https://dl.acm.org/doi/10.1145/3543507.3583278 #论文源码开源地址&#xff1a;http…

第二十章多线程

课程重点: 线程相关概念的理解线程的生命周期线程的常用方法 20.1. 线程的简介 20.1.1. 串行与并发 如果在程序中&#xff0c;有多个任务需要被处理&#xff0c;此时的处理方式可以有串行和并发&#xff1a; 串行&#xff08;同步&#xff09;&#xff1a;所有的任务&…

【密码学引论】分组密码

第三章 分组密码 DES、IDEA、AES、SM4 1、分组密码定义&#xff08;按照五个组成部分答&#xff09; 密钥空间&#xff1a;属于对称加密算法kekd明密文空间&#xff1a;将明文划分为m比特的组&#xff0c;每一块依次进行加密加解密算法&#xff1a;由key决定一个明文到密文的…

AIGC系列之:升级版的Stable Diffusion之SDXL介绍

目录 AIGC工具对比 DALL-E MidJourney Stable Diffusion 相关资料 SDXL介绍 SDXL生图效果 SDXL训练LoRA流程 AIGC工具对比 在目前的三大新兴文本转图像模型中&#xff0c;Stable Diffusion诞生得最晚&#xff0c;但由于拥有发展良好的开源社区&#xff0c;它的用户关注…

影响机器视觉测量精度的因素有哪些?

精度测量取决于分辨率 在机器视觉测量中提供高精度和低不确定度的决定性因素是获取的图像的分辨率。在这种情况下&#xff0c;术语分辨率 &#xff08;或图像分辨率&#xff09;意味着以实际单位的单个像素的大小。简而言之&#xff0c;如果一个摄像机传感器在水平方向上包含…

Vue实现可拖拽边界布局

Vue实现可拖拽边界布局 在前端开发中&#xff0c;有时需要实现一种可拖拽边界的布局&#xff0c;通过拖动分隔线来调整不同区域大小。例如&#xff0c;下图是一个典型的可拖拽边界布局&#xff0c;它由左右两个区域组成&#xff0c;左边是一个树形菜单&#xff0c;右边是一个上…

【开源】基于JAVA的农村物流配送系统

项目编号&#xff1a; S 024 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S024&#xff0c;文末获取源码。} 项目编号&#xff1a;S024&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

leetcode 1670

leetcode 1670 解题思路 使用2个deque作为类的成员变量 code class FrontMiddleBackQueue { public:deque<int> left;deque<int> right;FrontMiddleBackQueue() {}void pushFront(int val) {left.push_front(val);if(left.size() right.size()2){right.push_fr…

2021年06月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共20分) 第1题 执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 答案:B 第2题 执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 答案:A 第3题 执行下列程序,输出结果为?

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…

聊聊VMware vSphere

VMware vSphere是一种虚拟化平台和云计算基础设施解决方案&#xff0c;由VMware公司开发。它为企业提供了一种强大的虚拟化和云计算管理平台&#xff0c;能够在数据中心中运行、管理和保护应用程序和数据。vSphere平台与VMware ESXi虚拟化操作系统相结合&#xff0c;提供了完整…

Linux fork笔试练习题

1.打印结果&#xff1f; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int main() {int i0;for(;i<2;i){fork();printf("A\n");}exit(0); } 结果打印 A A A A A A 2.将上面的打印的\n去掉,结果如何? printf("…

HarmonyOS 应用模型开发指南介绍

一、基本概念解析 新版文档中的知识点&#xff0c;介绍更全面&#xff0c;逻辑更清晰&#xff0c;提供了各类基本概念解析&#xff0c;帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。 1、HAP是什么&#xff1f; 开发者通过DevEco Studio把应用程序编译为一…

入门级认证 | Salesforce管理员认证最新备考指南!

Salesforce管理员认证是其他任何管理员认证的基础。通过此考试将展示你对Salesforce功能和最佳实践的了解&#xff0c;使用自定义功能来管理、维护和扩展Salesforce平台。 Admin认证对备考者的要求 Salesforce管理员认证验证了备考者在管理客户和简档、维护数据质量、配置自动…

C/C++ Zlib实现文件压缩与解压

在软件开发和数据处理中&#xff0c;对数据进行高效的压缩和解压缩是一项重要的任务。这不仅有助于减小数据在网络传输和存储中的占用空间&#xff0c;还能提高系统的性能和响应速度。本文将介绍如何使用 zlib 库进行数据的压缩和解压缩&#xff0c;以及如何保存和读取压缩后的…

2、XFP 与 SFP+:有什么区别?

在光纤网络领域&#xff0c;光模块是促进数据顺利传输的重要组件。市场继续接受10G XFP和10G SFP等10G光模块&#xff0c;促使人们对XFP与SFP进行更仔细的审视。他们有什么区别&#xff1f;XFP和SFP的定义是什么&#xff1f;他们的应用场景又如何呢&#xff1f;在下文中寻找所有…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库&#xff0c;它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎&#xff0c;它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

8.0 泛型

通过之前的学习&#xff0c;读者可以了解到&#xff0c;把一个对象存入集合后&#xff0c;再次取出该对象时&#xff0c;该对象的编译类型就变成了Object类型&#xff08;尽管其在运行时类型没有改变&#xff09;。集合设计成这样&#xff0c;提高了它的通用性&#xff0c;但是…

MySQL(免密登录)

简介: MySQL免密登录是一种允许用户在没有输入密码的情况下直接登录到MySQL服务器的配置。这通常是通过在登录时跳过密码验证来实现的。 1、修改MySQL的配置文件 使用vi /etc/my.cnf&#xff0c;添加到【mysqld】后面 skip-grant-tables #配置项告诉mysql跳过权限验证&#…
最新文章