(十一)Java 之 String 类

目录

一. 前言

二. String 类

2.1. 创建字符串

2.2. 字符串长度

2.3. 连接字符串

2.4. 创建格式化字符串

2.5. String 常用方法

三. 课后习题


一. 前言

    在 Java 中,String 类是一种符合面向对象思想的字符串类,String 类是用于表示字符串的类。它是 Java 的核心类库中的一部分,因此无需特殊导入就可以在任何 Java 程序中使用。

    String 类是不可变的,这意味着一旦创建了一个字符串对象,就不能修改其内容。每当对字符串进行修改操作时,实际上是创建了一个新的字符串对象。这种设计是为了确保字符串的不可变性,以提高性能和安全性。因此如果在频繁的字符串拼接或修改场景中,建议使用 StringBuilder 类或StringBuffer 类,它们提供了可变的字符串操作方法,可以避免不必要的对象创建。

二. String 类

2.1. 创建字符串

创建字符串最简单的方式如下:

String greeting = "Hello world!";

    在代码中遇到字符串常量时,这里的值是 "Hello world!" ,编译器会使用该值创建一个 String 对象。和其它对象一样,可以使用关键字和构造方法来创建 String 对象。

    String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:

public class StringDemo {public static void main(String[] args) {char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.'};String helloString = new String(helloArray);  System.out.println(helloString);}
}

运行结果:

hello.

    注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。如果需要对字符串做很多修改,那么应该选择使用 StringBuffer 或 StringBuilder 类。

2.2. 字符串长度

用于获取有关对象的信息的方法称为访问器方法。

String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。

下面的代码执行后,len 变量等于 17:

public class StringDemo {public static void main(String[] args) {String palindrome = "Dot saw I was Tod";int len = palindrome.length();System.out.println("String Length is : " + len);}
}

运行结果:

String Length is : 17

2.3. 连接字符串

String 类提供了连接两个字符串的方法:

string1.concat(string2);

返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:

"My name is ".concat("Zara");

更常用的是使用 + 操作符来连接字符串,如:

"Hello," + " world" + "!"

运行结果:

"Hello, world!"

下面是一个例子:

public class StringDemo {public static void main(String[] args) {     String string1 = "saw I was ";     System.out.println("Dot " + string1 + "Tod");  }
}

运行结果:

Dot saw I was Tod

2.4. 创建格式化字符串

    我们知道输出格式化数字可以使用 printf() 和 format() 方法。String 类使用静态方法 format() 返回一个 String 对象而不是 PrintStream 对象。

    String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。如下所示:

System.out.printf("The value of the float variable is " +"%f, while the value of the integer " +"variable is %d, and the string " +"is %s", floatVar, intVar, stringVar);

你也可以这样写:

String fs;
fs = String.format("The value of the float variable is " +"%f, while the value of the integer " +"variable is %d, and the string " +"is %s", floatVar, intVar, stringVar);
System.out.println(fs);

2.5. String 常用方法

下面是 String 类支持的常用方法,更多详细请参看 Java API 文档:

序号方法描述
1char charAt(int index)返回指定索引处的 char 值。
2int compareTo(Object o)把这个字符串和另一个对象比较。
3int compareTo(String anotherString)按字典顺序比较两个字符串。
4int compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写。
5String concat(String str)将指定字符串连接到此字符串的结尾。
6boolean contentEquals(StringBuffer sb)当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。
7static String copyValueOf(char[] data)返回指定数组中表示该字符序列的 String。
8static String copyValueOf(char[] data, int offset, int count)返回指定数组中表示该字符序列的 String。
9boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束。
10boolean equals(Object anObject)将此字符串与指定的对象比较。
11boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。
12byte[] getBytes()
 
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13byte[] getBytes(String charsetName)使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此字符串复制到目标字符数组。
15int hashCode()返回此字符串的哈希码。
16int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引。
17int indexOf(int ch, int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18int indexOf(String str)
 
返回指定子字符串在此字符串中第一次出现处的索引。
19int indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20String intern()
 
返回字符串对象的规范化表示形式。
21int lastIndexOf(int ch)返回指定字符在此字符串中最后一次出现处的索引。
22int lastIndexOf(int ch, int fromIndex)返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23int lastIndexOf(String str)返回指定子字符串在此字符串中最右边出现处的索引。
24int lastIndexOf(String str, int fromIndex)返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25int length()返回此字符串的长度。
26boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
27boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等。
28boolean regionMatches(int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等。
29String replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30String replaceAll(String regex, String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31String replaceFirst(String regex, String replacement)使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
33String[] split(String regex, int limit)根据匹配给定的正则表达式来拆分此字符串。
34boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始。
35boolean startsWith(String prefix, int toffset)测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36CharSequence subSequence(int beginIndex, int endIndex)返回一个新的字符序列,它是此序列的一个子序列。
37String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
38String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串。
39char[] toCharArray()将此字符串转换为一个新的字符数组。
40String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41String toLowerCase(Locale locale)使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42String toString()返回此对象本身(它已经是一个字符串!)。
43String toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44String toUpperCase(Locale locale)使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45String trim()返回字符串的副本,忽略前导空白和尾部空白。
46static String valueOf(primitive data type x)返回给定data type类型x参数的字符串表示形式。

三. 课后习题

1. 模拟一个 trim() 方法,去除字符串两端的空格。

2. 将一个字符串进行反转。将字符串中指定部分进行反转。比如"abcdefg",反转子串"cdef",转为"abfedcg"。

3. 获取一个字符串在另一个字符串中出现的次数。

4. 获取两个字符串中最大相同子串。

5. 对字符串中字符进行自然排序。

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

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

相关文章

ChatGPT的底层核心概念

ChatGPT的底层核心概念 1.1 词嵌入 ​ 词嵌入是一种将单词或文本转换为数字向量的技术。简单来说,它将自然语言中的词汇转换为计算机可以理解的形式,因为计算机无法直接理解单词或文本。例如,对于句子“The monkey is on the horse"&a…

React中hooks使用限制及保存函数组件状态

React Hooks 的限制主要有两条: 不要在循环、条件或嵌套函数中调用 Hook; 在 React 的函数组件中调用 Hook。 首先,Hooks是一个对象,大致结构如下: const hook: Hook {memoizedState: null,baseState: null,baseQ…

面试题之项目做过哪些性能优化可以从哪方面说?

常见的性能优化措施: 1. 减少 HTTP 请求数:合并和压缩 CSS、JavaScript ⽂件,使⽤雪碧图、字体图标等减少图片请求,减少不必要的资源请求。 2. 减少 DNS 查询:减少使用不同的域名,以减少 DNS 查询次数。…

19-k8s的附加组件-coreDNS组件

一、概念 coreDNS组件:就是将svc资源的名称解析成ClusterIP; kubeadm部署的k8s集群自带coreDNS组件,二进制部署需要自己手动部署; [rootk8s231 ~]# kubectl get pods -o wide -A k8s系统中安装了coreDNS组件后,会有一个…

ubuntu20.04.6wifi图标消失问题解决方案

介绍 本人电脑 惠普战99 2023版 集显版 双系统:win11 ubuntu 20.04.6LTS 安装ubuntu系统后WiFi图标无法显示,四处寻找方法,得以解决 注意 本人亲测有效,但不保证所有机型适用 方法 下载firmware: 链接: https:…

【算法题】108. 将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: 输入:nums [-10,-3,0…

AcWing1239.乘积最大

[题目概述] 给定 N 个整数 A1,A2,…AN。 请你从中选出 K 个数&#xff0c;使其乘积最大。 请你求出最大的乘积&#xff0c;由于乘积可能超出整型范围&#xff0c;你只需输出乘积除以 1000000009 的余数。 注意&#xff0c;如果 X<0&#xff0c; 我们定义 X 除以 1000000009…

平台组成-门户系统

门户系统是整个平台的门面。从功能上讲&#xff0c;可以区分为内部门户和外部门户。内部门户面向内部应用&#xff0c;是内部管理的入口&#xff0c;一般运行在内网里&#xff1b;外部门户面向公众&#xff0c;是企业宣传、对外服务的窗口&#xff0c;一般运行在外网上。从访问…

20240211-日常学习(嵌入式微处理器)

目录 嵌入式微处理器的存储体系结构指令集主流的嵌入式微处理器 一些具体介绍冯诺依曼/普林斯顿结构ARM系列嵌入式微处理器 嵌入式微处理器的 存储体系结构 冯诺依曼/普林斯顿结构哈佛结构 指令集 RISCCISC 主流的嵌入式微处理器 ARM系列嵌入式微处理器MIPS系列嵌入式微处…

解锁Spring Boot中的设计模式—05.策略模式:探索【策略模式】的奥秘与应用实践!

1.策略者工厂模式&#xff08;Map版本&#xff09; 1.需求背景 假设有一个销售系统&#xff0c;需要根据不同的促销活动对商品进行打折或者其他形式的优惠。这些促销活动可以是针对不同商品类别的&#xff0c;比如男装、女装等。 2.需求实现 活动策略接口&#xff1a;定义了…

Java:集合以及集合进阶 --黑马笔记

一、集合概述和分类 1.1 集合的分类 除了ArrayList集合&#xff0c;Java还提供了很多种其他的集合&#xff0c;如下图所示&#xff1a; 我想你的第一感觉是这些集合好多呀&#xff01;但是&#xff0c;我们学习时会对这些集合进行分类学习&#xff0c;如下图所示&#xff1a;…

112 C++可调用对象,std::function std::bind

一 可调用对象 本节课将可调用对象整理一下 1 函数指针 2.具有operator()成员函数的类对象仿函数&#xff08;&#xff09; 3. 可被转换为函数指针的类对象 4. 类成员函数指针 5.总结 二 std::function(可调用对象包装器) 1.绑定普通函数 2.绑定类的静态成员函数 3.绑定仿函数…

javaweb学习day03(JS+DOM)

一、javascript入门 1 官方文档 地址: https://www.w3school.com.cn/js/index.asp离线文档: W3School 离线手册(2017.03.11 版).chm 2 基本说明 JavaScript 能改变 HTML 内容&#xff0c;能改变 HTML 属性&#xff0c;能改变 HTML 样式 (CSS)&#xff0c;能完成 页面的数据…

K8s进阶之路-Pod的生命周期

Pod创建过程&#xff1a; 首先创建一个pod&#xff0c;然后创建一个API Server 和 Etcd【把创建出来的信息存储在etcd中】 然后创建 Scheduler&#xff0c;监控API Server是否有新的Pod&#xff0c;如果有的话&#xff0c;会通过调度算法&#xff0c;把pod调度某个node上 在nod…

HDR 摄影

HDR 摄影&#xff0c;即高动态范围 High Dynamic Range摄影&#xff0c;旨在通过合并不同曝光值的照片来捕捉场景中从最亮到最暗部分的全部细节。 这种技术对于在一个图像中展现广泛的亮度范围特别有用&#xff0c;尤其是在自然光线条件下&#xff0c;如直射日光或阴影区域&…

力扣代码学习日记四

Problem: 459. 重复的子字符串 文章目录 思路解题方法复杂度代码 思路 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s &q…

独孤思维:出了20多单,但优化空间巨大

前些日子&#xff0c;在绝版书陪跑群里&#xff0c;有个学员&#xff0c;说自己买了20多本书。 大家都觉得挺不错的&#xff0c;想听听她分享。 结果分享出来以后&#xff0c;我觉得有很大的优化空间。 虽然她把每个精准的对标店铺&#xff0c;做了筛选。 但是对于单个品&a…

BUGKU-WEB source

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看源码&#xff0c;看F12网络请求没有东西只能老老实实按照提示用Linux去扫描目录 相关工具 kali虚拟机安装gobuster 或者dirsearch 解题步骤 先查看源码&#xff1a; flag{Zmxhz19ub3RfaGvyzS…

【c++基础】小鱼的航程

说明 有一只小鱼&#xff0c;它上午游泳150公里&#xff0c;下午游泳100公里&#xff0c;晚上和周末都休息&#xff08;实行双休日)&#xff0c;假设从周x(1<x<7)开始算起&#xff0c;请问这样过了n天以后&#xff0c;小鱼一共累计游泳了多少公里呢&#xff1f; 输入数…

枚举,#define,C中程序内存区域划分

目录 一、枚举 1.1枚举类型的声明 1.2枚举类型的优点 1.3枚举类型的使用 二、#define定义常量 三、C中程序内存区域划分 一、枚举 1.1枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。 比如我们现实生活中&#xff1a; ⼀周的星期⼀到星期日是有限…