Java篇String类的常见方法

news2024/11/16 5:41:43

目录

一. String类的概念

1.1 String类的特性

二. 字符串的构造方式

三. 常用方法

3.1 字符串查找

3.2 字符串转换

3.3 字符串比较

3.3.1 equals( )方法

3.3.2 compare To( )方法

3.3.3 compare ToIgnoreCase( )方法

3.4 字符串替换

3.4.1 replace( )方法

3.4.2 replaceFrist( )方法

3.4.3 replaceAll( )方法

3.5 字符串拆分

3.5.1 String[] split(String regex)

3.5.2 String[] split(String regex, int limit)

 3.6 字符串截取

3.6.1 String substring(int beginIndex)

 3.6.2 String substring(int beginIndex, int endIndex)

​编辑四.StringBuilder和StringBuffer

4.1 append(String str)

4.2 setCharAt(int index, char ch)

4.3 reverse( ) 

 4.4 capacity( ) 

4.5 ensureCapacity(int mininmumCapacity)

 4.6 insert(int offset, String str)

4.7 deleteCharAt(int index)

 4.8 replace(int start, int end, String str)

结语


一. String类的概念

在Java中 String类是用于表示和操作字符串的类,字符串是Java中常用的数据类型,用于存储文本信息,并且String类中提供了许多方法用来执各种字符串操作,那么我们随着下文来学习一下常见的方法。

1.1 String类的特性

1. 不可变性:

String 对象是不可变的,一旦创建了 String 对象,其里面的内容就不能被修改,对 String的任何操作实际上都是创建了一个新的 String 对象。

注意:不能修改指的是:String对象的内容不能修改,而指向String对象的引用是可以修改的

2. 常量池的概念

字符串常量池是Java中用于存储字符串字面量的内存区域,为了节省内存,Java使用字符常量池来存储字符串字面量,当创建相同的字符串字面量时,它们会引用常量池中的同一个对象,从而降低程序内存的开销。

二. 字符串的构造方式

1. 使用字符串字面量构造

​
public class Test {
    public static void main(String[] args) {
        String s1 = "hello world"; //直接使用字符串字面量进行构造
        System.out.println(s1);
    }
}

​

2. 通过new关键字创建一个String对象

public class Test {
    public static void main(String[] args) {
        String s2 = new String("hello world");//通过new关键字创建对象
        System.out.println(s2);
    }
}

3.使用字符数组进行构造

public class Test {
    public static void main(String[] args) {
        char[] str = {'h','e','l','l','o','w','o','r','l','d'};
        String s3 = new String(str); //使用字符数组进行构造
        System.out.println(s3);
    }
}

以上就是最常见的最常见的字符串构造方式。

三. 常用方法

3.1 字符串查找

(1)char charAt( int index)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        char ch=str.charAt(1);
        System.out.println(ch);//e
    }
}

如果输入一个不合法的下标位置,就会发生报错:

(2)int indexOf( int ch)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        int n=str.indexOf('l');
        System.out.println(n); //2
    }
}

(3)int indexOf(int ch, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello world";
        int n=str.indexOf('o',6);
        //从下标为6的位置(w)开始往后查找o的位置,7
        System.out.println(n);
    }
}

(4)int indexOf(String str)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.indexOf("wor");
        // 返回wor第一次出现的位置,没有返回-1,所以返回值为6
        System.out.println(n);
    }
}
(5)int indexOf(String str, int fromIndex) 
public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.indexOf("wor",8);
        //从下标为8的位置开始找wor第一次出现的位置,没有返回-1,所以这里返回值为11
        System.out.println(n);
    }
}

(6)int lastIndexOf(int ch)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf('w');
        //从后往前找,返回w第一次出现的位置,没有返回-1,所以返回值为11
        System.out.println(n);
    }
}

(7)int lastIndexOf(int ch, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf('w',10);
        //从下标10的位置开始找,从后往前找w第一次出现的位置,没有返回-1,所以返回值为6
        System.out.println(n);
    }
}
(8)int lastIndexOf(String str)
public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf("wor");
        //从后往前找,返回wor第一次出现的位置,没有返回-1,返回值为11
        System.out.println(n);
    }
}

(9)int lastIndexOf(String str, int fromIndex)

public class Test {
    public static void main(String[] args) {
        String str="hello worldwor";
        int n=str.lastIndexOf("wor",10);
        //从下标为10的位置开始找,从后往前找wor第一次出现的位置,没有则返回-1,这里返回值为6
        System.out.println(n);
    }
}

3.2 字符串转换

(1) 数值和字符串转化

数值转换成字符串,用String.valueOf( )进行转换:

public class Test {
    public static void main(String[] args) {
        // 数字转字符串
        String s1 = String.valueOf(123456);
        String s2 = String.valueOf(13.14521);
        System.out.println(s1);
        System.out.println(s2);
    }
}

数字字符串转换成数字,用 Interger.valueOf( )进行转换:

public class Test {
    public static void main(String[] args) {
        // 字符串转数字
        int n= Integer.valueOf("1234");
       double m= Double.valueOf("12.13");
        System.out.println(n);
        System.out.println(m);
    }
}

并且我们也可以传数字字符串,所需要转换的进制数:

public class Test {
    public static void main(String[] args) {
        // 字符串转数字
       int n=Integer.valueOf("1111",2);
       //后面的2表示,前面的数字字符串中的数字是2进制的形式,我们转换成10进制形式
        //就是15
        System.out.println(n);
    }
}

(2)字母的大小写转换

字母大小写转换我们使用String.toUpperCase----小写转大写 String.toLowerCase----大写转小写

public class Test {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
    // 小写转大写
        System.out.println(s1.toUpperCase());//HELLO
    // 大写转小写
        System.out.println(s2.toLowerCase());//hello
    }
}

(3)字符串转数组

我们还可以将一个字符串转换成一个数组,使用String.toCharArray( )方法进行转换:

public class Test {
    public static void main(String[] args) {
        String s = "hello";
        // 字符串转数组
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        }
    }
}

(4)格式化字符串

我们可以使用String.format( )方法进行字符串的格式化:

public class Test {
    public static void main(String[] args) {
        String s = String.format("%d-%d-%d", 2024, 10,30);
        System.out.println(s);
        //打印2024-10-30
    }
}

3.3 字符串比较

当我们比较基本数据类型的对象的时候,使用 == 可以进行比较,但是对于我们的String类型(引用类型)来说,使用 == 进行比较,比较的是引用中的地址:

从上图就可以发现 str1和str2中存放的的字符串是一样的,但是运行结果显示并不相等,那么当我们需要进行字符串比较的时候该怎么办呢?

3.3.1 equals( )方法

equals( )方法的比较方式:按照字典序比较--->比较的是字符大小的顺序

3.3.2 compare To( )方法

compare To( )方法的比较方法:按照字典序进行比较 ----> compare To( )方法与equals( )方法的区别:equals( )方法的返回值是 boolean 类型的值,而 compare To( )方法返回的是 int 类型的值。

1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值。
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值。

3.3.3 compare ToIgnoreCase( )方法

该方法与compare To( )方法没有很大差别,但是compare ToIgnoreCase( )方法在进行比较的时候能够忽略字符的大小写:

3.4 字符串替换

3.4.1 replace( )方法

replace( )方法能够将一个字符串中指定的字符替换成一个新指定的字符

3.4.2 replaceFrist( )方法

 replaceFrist( )方法能够将字符串中指定的第一个字符串替换成新指定的字符串

3.4.3 replaceAll( )方法

 replaceAll( )方法 与 replaceFrist( )方法不同的是: replaceAll( )方法能将字符串中所有指定的字符串全部替换成一个新指定的字符串

3.5 字符串拆分

3.5.1 String[] split(String regex)

String[] split( )方法能够将一个字符串按照指定的字符为分割线,分割成若干个子字符串:

3.5.2 String[] split(String regex, int limit)

String[] split(String regex, int limit)方法能够将字符串按照指定的格式,分割成 limit 个子字符串:

 3.6 字符串截取

3.6.1 String substring(int beginIndex)

将字符串从下标为 beginIndex 的位置开始截取到字符串结尾:

 3.6.2 String substring(int beginIndex, int endIndex)

将字符串从下标为 beginIndex 的位置开始截取到 endIndex 位置的前一个字符为止:

四.StringBuilderStringBuffer

在开头的String类的特征中,我们就说明了String类的不可变性,对 String 对象的任何修改操作都会创建一个新的对象,在程序运行的过程中,效率是很低的,那么这个时候如果要对字符串进行修改尽量使用StringBuffer或者StringBuilder

由于 String 的不可更改特性,为了方便字符串的修改, Java 中又提供 StringBuilder StringBuffer 类。这两个类大部分功能是相同的

在这里介绍一下Stringbuilder一些常用的方法。

4.1 append(String str)

append(String str)方法可以在字符串的末尾追加新的内容:

注意:追加的不只是字符串,还可以追加:booleancharchar[]doublefloatintlongObjectStringStringBuff类型的变量。 

4.2 setCharAt(int index, char ch)

setChatAt(int index, char ch)方法能够将 index位置的字符替换成ch:

4.3 reverse( ) 

将字符串进行反转:

 4.4 capacity( ) 

capacity( ) 方法可以获取底层保存字符串空间总的大小:

4.5 ensureCapacity(int mininmumCapacity)

将该字符串的内存空间扩展到指定的空间大小:

 4.6 insert(int offset, String str)

在指定的下标位置插入一个字符串:

4.7 deleteCharAt(int index)

删除指定下标的字符:

 补充:delete(int start, int end)能够删除[start, end)区间内的字符:

 4.8 replace(int start, int end, String str)

[start, end)位置的字符替换为str:

注意StringStringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则

1. String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
2. StringBuilder变为String: 调用toString()方法

结语

以上就是本期的内容啦,希望大家看完本篇能够收获满满 ≧◉◡◉≦,让我们一起进步~在此感谢大家的观看!!!

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

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

相关文章

「QT」文件类 之 QDataStream 数据流类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

MySQL45讲 第二十三讲 是怎么保证数据不丢的?

文章目录 MySQL45讲 第二十三讲 是怎么保证数据不丢的&#xff1f;一、binlog 写入机制&#xff08;一&#xff09;事务执行与 binlog cache&#xff08;二&#xff09;事务提交与 binlog 文件写入 二、redo log 写入机制&#xff08;一&#xff09;事务执行与 redo log buffer…

pgaudit插件-pgslq

使用pgaudit插件 一.介绍 postgresql可以通过log_statementall 提供日志审计&#xff0c;但是无法详细的提供日志信息&#xff0c;使用ogaudit能够提供详细的会话和对象审计日志&#xff0c;是PG的一个扩展插件 注意&#xff1a;pgAudit可能会生成大量日志。请谨慎确定要在您…

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件

Vue 项目打包后环境变量丢失问题&#xff08;清除缓存&#xff09;&#xff0c;区分.env和.env.*文件 问题背景 今天在导报项目的时候遇到一个问题问题&#xff1a;在开发环境中一切正常&#xff0c;但在打包后的生产环境中&#xff0c;某些环境变量&#xff08;如 VUE_APP_B…

群控系统服务端开发模式-应用开发-前端菜单功能开发

今天优先开发菜单及角色&#xff0c;明天将开发岗位配置、级别配置等功能。具体看下图 而前端的路由不需要手动添加&#xff0c;是依据数据库里面存储的路径。 一、添加视图 在根目录下src文件夹下views文件夹下permission文件夹下menu文件夹下&#xff0c;新建index.vue&…

数据结构Python版

2.3.3 双链表 双链表和链表一样&#xff0c;只不过每个节点有两个链接——一个指向后一个节点&#xff0c;一个指向前一个节点。此外&#xff0c;除了第一个节点&#xff0c;双链表还需要记录最后一个节点。 每个结点为DLinkNode类对象&#xff0c;包括存储元素的列表data、…

【HarmonyOS学习日志(8)】UIAbility,HAP,AbilityStage组件及其生命周期

基本概念 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 在项目创建时&#xff0c;系统默认生成的EntryAbility类继承了UIAbility类。 ExtensionAbility组件&#xff1a;是基于特定场景&#xff08;例如服务卡片、输入法等&#xff09;提供的应用组件…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API &#xff08;1&#xff09;初始化互斥量 &#xff08;2&#xff09;销毁互斥量 &#xff08;3&#xff09;互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数

引言 在图像处理中&#xff0c;边缘通常是图像中像素强度变化最大的地方&#xff0c;这种变化可以通过计算图像的梯度来量化。梯度是一个向量&#xff0c;它的方向指向像素强度增加最快的方向&#xff0c;它的大小&#xff08;或者说幅度&#xff09;表示像素强度增加的速度。…

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

k8s服务内容滚动升级以及常用命令介绍

查看K8S集群所有的节点信息 kubectl get nodes 删除K8S集群中某个特定节点 kubectl delete nodes/10.0.0.123 获取K8S集群命名空间 kubectl get namespace 获取K8S所有命名空间的那些部署 kubectl get deployment --all-namespaces 创建命名空间 web界面上看到的效果,但是…

MinIo在Ubantu和Java中的整合

1.MinIo在Ubantu中的部署 首先准备好一台已经安装好Ubantu系统的服务器 MinIO是一个开源的对象存储服务器&#xff0c;兼容Amazon S3&#xff0c;性能卓越&#xff0c;适合存储非结构化数据&#xff0c;例如照片、视频、日志文件、备份和容器镜像等。 1&#xff1a;更新系统…

设计模式-参考的雷丰阳老师直播课

一般开发中使用的模式为模版模式策略模式组合&#xff0c;模版用来定义骨架&#xff0c;策略用来实现细节。 模版模式 策略模式 与模版模式特别像&#xff0c;模版模式会定义好步骤定义好框架&#xff0c;策略模式定义小细节 入口类 使用模版模式策略模式开发支付 以上使用…

【LeetCode】【算法】53. 最大子数组和

LeetCode 53. 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组是数组中的一个连续部分。 思路 思路&#xff1a;动态规划秒了 具体递推式如…

供应SW6301V单C口多协议升降压移动电源IC

1. 概述 SW6301V 是一款高集成度的单 C 口多协议升降压移动电源 SOC。集成双向升降压控制器&#xff0c;支持 2~6 节 电池串联&#xff0c;提供 100W 功 率 输 入 输 出 &#xff1b; 支 持 C 口 快 充 输入输出 &#xff1b; 支 持UFCS/PPS/PD/SVOOC/VOOC/SCP/FCP/QC/AFC/BC…

C++常用的新特性-->day06

时间间隔duration duration表示一段时间间隔&#xff0c;用来记录时间长度&#xff0c;可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下 // 定义于头文件 <chrono> template<class Rep,class Period std::ratio<1> > class duration;Rep&…

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…

性能面向下一代PCIe Gen 5,G991B322HR、G99L12312HR 安费诺ExtremePort™ Swift连接器支持内部I/O应用

前言 为了在网络设备和服务器上提供更高速度和更小尺寸的解决方案&#xff0c;Amphenol开发了ExtremePort™ Swift连接器&#xff0c;适用于PCIe Gen5 NRZ 32GT/s、UPI 2.0 24GT/s、24Gb/s SAS信号。 G991B322HR G9912312HR G9912322HR G9914312HR G991B312HR G991C312HR G99…

IDEA调整警告级别【IntelliJ IDEA 2024.2.0.1】

文章目录 目前现状鼠标悬停&#xff0c;选择配置筛选 > 取消选择OK效果 目前现状 需要把提示改成只要显示error的5个 鼠标悬停&#xff0c;选择配置 筛选 > 取消选择 OK 效果