JavaSE:String类常用方法(巨详细)

1、引言

在学习C语言时,我们就已经了解了字符串,但是在C语言中字符串只能用字符数组或者指针来表示,没有特定的字符串类型,而在Java中,我们有了字符串这一特定的类型---String类。

2、String类的常用方法

2.1 字符串的构造方法

在我们定义一个字符串的时候,我们可以使用以下常用的三种方法:

1.通过双引号直接定义

2.通过new对象来定义

3.通过字符数组来定义 

public class Test {
    public static void main(String[] args) {
        //1.通过双引号直接定义
        String s1 = "abc";
        //2.通过new对象来定义
        String s2 = new String("abc");
        //3.通过字符数组来定义
        char[] arr = {'a','b','c'};
        String s3 = new String(arr);
    }
}

2.1.1【注意事项】 String类是一个引用类型

要知道String类是一个引用类型,并非字符串本身:

我们通过调试可以看到,String类中有着四种成员变量,而只有value数组中存储着字符串的值,

在String的源码中,也确实有着四种实例变量:

在这里我们只考虑value数组,因为value数组中存储着字符串的内容。

由于String是一个引用类型,在内存中有着以下的存储模式:

2.2 字符串间的比较方法

2.2.1 引用变量存储的值(地址)是否相同

我们已知字符串是引用变量,使用“==”来比较所引用的对象是否为同一份:

2.2.2 字符串的内容是否相同

Object类中的equals方法与“==”的作用相同,而String类重写了equals方法,用来比较字符串中的内容是否相同:

2.2.3 比较字符串的大小

我们点过去String类的源码,可以看到String类也实现了Comparable接口,

说明重写了compareTo方法,我们利用compareTo方法来比较字符串的大小(相同返回0,大于返回正数,小于返回负数):

Java中方法多样,当我们想忽略大小写来比较时,我们可以调用compareToIgnoreCase方法

2.3 String类的查找方法

2.3.1 charAt方法

我们可以通过这个方法来找到字符串中某一下标的字符:

注释:与数组不同,在字符串中计算字符串长度调用的是length方法。

2.3.2 indexOf方法

通过这个方法,我们可以查找(从前往后查找)到某一字符或字符串第一次出现的位置的下标,在String类中,有多个重载的方法,我们可以查找字符,也可以查找字符串。其中fromIndex参数是从指定下标开始查找:

2.3.3 lastIndexOf方法

顾名思义,lastIndexOf方法是从后往前查找某个字符或字符串,我们也可以指定位置从后往前查找:

2.4 与字符串有关的转换方法

2.4.1 数值和字符串的转换

我们可以通过valueOf方法来将数值转换为字符串:

通过相应数字的包装类型来将字符串转换为数字:

2.4.2 大小写转换

2.4.3 字符串和数组的转换

利用这个方法,可以直接将字符串转换为字符数组:

同样,字符数组也可以通过valueOf方法转换为字符串:

若是整形或其他类型数组,使用Arrays类中的toString方法:

2.4.4 对象转字符串

我们可以通过valueOf方法来将对象转换为字符串(重写toString方法):

2.5 字符串的拆分方法

我们可以以某个字符为分割线,将字符串分割为若干个字符数组:

我们也可以以多个字符来分割,用 | 符号来连接

注意:

当以字符"|","*","+","."来分割时,前面需要加上转义字符"\\",

而以"\"来分割时,需要写成"\\\\"(在字符串中就是"...\\...",因为为转义字符不能单独出现,"\\"来代表一个"\")

如下图所示:

2.6 字符串的截取方法

我们通过这个方法,可以截取所想要的子字符串(传入下标之后的子串,也可以指定范围)

代码演示:

1.

我们截取了3下标以后的子串(包括3下标):

2.

我们可以截取指定范围的子串,但注意:所给出的范围是左闭右开!!!

2.7 字符串的替换方法

1.

用一个新字符替换掉字符串中的某个旧字符:

2.

用新字符串替换掉字符串中的旧的子字符串:

3.

替换掉第一个出现的旧子字符串:

4.

替换所有出现的子字符串:

我们发现,使用replace替换字符串和使用replaceAll替换字符串的效果是相同的。

2.8 去除空白字符方法

我们可以利用这个方法来去除字符串开头和结尾(内部的无法去除)的空白字符(空格, 换行, 制表符等)。

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

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

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

相关文章

鲲泰新闻|神州鲲泰创新智算之旅北京站开幕,发布全新智算架构和液冷整机柜产品应对 “多云、异构、绿色”挑战

5月17日,神州鲲泰智算中国行北京站盛大召开。在本次活动上,神州鲲泰针对用户对大模型训练、大算力需求的痛点,重磅发布多云异构环境下智算中心绿色着陆的产品及方案,包含异构智算调度运营平台HISO、异构智算加速平台HICA以及一体化…

pytest-sugar插件:对自动化测试用例加入进度条

摘要 在自动化测试过程中,测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条,从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分&#xff…

windows web提权

#Web到Win-系统提权-人工操作 如果提权中无法执行命令的话,可以尝试上传cmd.exe到可读写目录再调用 优点:解决实时更新不集成的EXP 缺点:操作繁琐,需要各种复现调试 1、信息收集 参考常见命令(见上图) …

ZYNQ EMIF进行PS与PL间的数据交互

1 概述 AXI-EMC IP 是一个可以可以支持各种内存型号的控制器,利用这个IP可以非常方便地模拟各种类型的内存或者FLASH接口实现数据的交互和通信。以下是AXI-EMC IP的功能特性: 1、支持AXI4 Slave Memory Map 接口,数据宽度为32位和64位 2、支持写入/读取寄存器的可选AXI4-Li…

帝国CMS如何修改时间格式,变成几分钟,几小时教程

该插件已经在帝国cms6.6上测试通过&#xff0c;至于其他版本&#xff0c;请自行测试。 目前支持&#xff1a;标签模板&#xff0c;列表模板&#xff0c;内容模板 安装说明&#xff1a; 把以下的内容复制到 /e/class/userfun.php 文件里&#xff08;放在<?php和?>之间…

kafka-偏移量图解

生产者偏移量&#xff1a;生产者发送消息时写入到哪个位置&#xff08;主题的每个分区会存储一个 leo 即将写入消息的偏移量&#xff09;&#xff0c;每次写完消息 leo 会 1 消费者偏移量&#xff1a;消费者从哪个位置开始消费消息&#xff0c;小于等于 leo&#xff0c;每个组…

低调收藏,这份MobaXterm使用指南很全面

中午好&#xff0c;我的网工朋友。 MobaXterm&#xff0c;这个名字对于我们这些经常需要在Windows环境下与Linux服务器打交道的人来说&#xff0c;应该并不陌生。它不仅仅是一个SSH客户端&#xff0c;更是一个功能强大的终端工具箱&#xff0c;集成了X服务器和Unix命令集&…

【深入学习Redis丨第一篇】Redis服务器部署详解

前言 小伙伴们大家好&#xff0c;我是陈橘又青&#xff0c;今天起 《深入学习Redis》 专栏开始更新。本专栏将专为希望深入了解Redis的开发者、系统架构师以及数据库爱好者而写的免费专栏。从Redis的基本概念入手&#xff0c;逐步深入到其内部实现和高级用法。希望能帮助你更好…

【Python】 深入理解 Python 包管理器:pip vs conda

基本原理 在Python编程世界中&#xff0c;包管理器是一个不可或缺的工具。它帮助开发者安装、更新和管理Python库。目前&#xff0c;最流行的两个包管理器是pip和conda。了解它们之间的区别&#xff0c;对于Python开发者来说至关重要。 pip pip是Python的官方包管理器&#…

Excel计算两个日期之间差额天数及DATEDIF使用

一.计算两个日期之间的差额天数 1.两个日期直接相减就可以得到两个日期间隔的天数&#xff0c;这里需要注意日期格式哦 日期格式需要为XXXX/XX/XX,不能为XXXX.XX.XX&#xff0c;否则显示Value错误如下。 二.使用DATEDIF函数计算差额天数 该函数只能手写&#xff0c;好像不能自…

Java集合—Set(Collection子接口)及其子类(HashSet、LinkedHashSet)包括HashMap源码分析

Set接口是 Collection接口的子接口。 1、无序&#xff0c;即添加元素和去除元素的顺序不一致。 但是每次取出的顺序是一致的。 2、不允许重复元素&#xff0c;可以有null&#xff0c;但只能有一个。 3、实现类很多&#xff0c;主要介绍HashSet、LinkedHashSet 和 TreeSet。 常用…

使用Ollama和Open WebUI管理本地开源大模型的完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月27日12点20分 &#x1f004;️文章质量&#xff1a;96分 目录 ✨️Open-WebUI介绍 优点 &#x1f4a5;部署教程…

Reddit是什么?跨境独立站卖家如何用Reddit营销?

在互联网时代&#xff0c;社交媒体营销已成为品牌推广的重要手段。Reddit&#xff0c;作为一个充满活力的社区平台&#xff0c;正逐渐受到越来越多跨境独立站卖家的关注。如果你在独立站引流方面遇到瓶颈&#xff0c;不妨了解一下Reddit这个平台。本文将介绍Reddit是什么&#…

天诚公租房/人才公寓WiFi人脸识别物联网智能门锁解决方案

人才是引领城市高质量发展的重要因素&#xff0c;城市要想吸纳人才的保障便是人才公寓。近年来&#xff0c;全国各地一二三线城市都在大力建设人才公寓&#xff0c;集聚菁英人才&#xff0c;倾力打造人才高地。 一、人才公寓如火如荼建设 2023年底&#xff0c;山东德州提出三年…

排序进阶----插入排序,希尔排序

各位看官们好&#xff0c;接下来鄙人想与大家分享的实现被称为六大排序之一的插入排序。其实关于这六大排序在我们最开始就已经接触过了。我们在最开始学习c语言的时候&#xff0c;我们要学习到其中之一的冒泡排序。虽然现在看起来冒泡排序确实是没有太大的实际效果&#xff0c…

【第一节】从C语言到C++

目录 一、面向对象编程 1.早期概念 2.发展与普及 3. 现代发展 二、从C语言到C 1.关于堆内存的使用 2.关于函数重载 3.关于默认参数 4.引用 5.引用参数 6.作用域符号 三、C的输入输出机制 一、面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&am…

Midjourney进阶必看 | 垫图效果的必备技能

还在纠结Midjourney垫图效果不佳&#xff1f;快看看是不是这5点没有做好&#xff01; 前言一、内容形式要一致二、用文本描述强调画面内容三、尝试不同的--iw参数四、用--no参数去除隐藏干扰项五、记得多生成几次 总结 前言 图像提示词&#xff0c;也就是垫图&#xff0c;是Mi…

Verilog实战学习到RiscV - 1 : Yosys 综合

Yosys 综合 实例 一般 FPGA IDE 的第一步都是RTL 综合&#xff08;Synthesis&#xff09;。之后就能看到数字电路图了。然后可以做RTL 级的仿真模拟。 直接上代码&#xff0c;这里我们看一个简单的加法器来学习。 module adder(input [7:0] a,input [7:0] b, input …

Java | Leetcode Java题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> ans new LinkedList<List<Integer>>();if (root null) {return ans;}Queue<TreeNode> n…

el-tabs中的下拉框被覆盖解决方法

解决方法&#xff1a; ::v-deep .el-tabs__content{// overflow:hidden 会导致 分页下拉框超出部分会被.el-tabs__content隐藏overflow: visible; }