Java之String 类的学习

目录

1. String类的重要性

2. 常用方法

2.1 字符串常用3种构造

2.2 String对象的4种比较

1. ==比较是否引用同一个对象        

2. boolean equals(Object anObject) 方法:按照字典序比较

3. int compareTo(String s) 方法: 按照字典序进行比较

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

方法整合+分析代码实例

2.3 字符串查找

2.4 字符串转化

2.5字符串替换

2.6字符串拆分

2.7字符串截取


1. String类的重要性

C语言中要表示字符串只能使用字符数组或者字符指针但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字 符串应用又非常广泛,因此Java语言专门提供了String

2. 常用方法

2.1 字符串常用3种构造

public static void main(String[] args) {
// 使用常量串构造
String s1 = "hello bit";
System.out.println(s1);
// 直接newString对象
String s2 = new String("hello bit");
System.out.println(s1);
// 使用字符数组进行构造
char[] array = {'h','e','l','l','o','b','i','t'};
String s3 = new String(array);
System.out.println(s1);
}

2.2 String对象的4种比较

1. ==比较是否引用同一个对象        

public static void main(String[] args) {
2. boolean equals(Object anObject) 方法:按照字典序比较
字典序:字符大小的顺序
String类重写了父类Object中equals方法,Object中equals默认按照==比较,String重写equals方法后,按照
如下规则进行比较,比如: s1.equals(s2)
int a = 10;
int b = 20;
int c = 10;
// 对于基本类型变量,==比较两个变量中存储的值是否相同
System.out.println(a == b); // false
System.out.println(a == c); // true
// 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // false
System.out.println(s1 == s4); // true
}

2. boolean equals(Object anObject) 方法:按照字典序比较

public boolean equals(Object anObject) {
// 1. 先检测this 和 anObject 是否为同一个对象比较,如果是返回true
if (this == anObject) {
return true;
}
// 2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回false
if (anObject instanceof String) {
// 将anObject向下转型为String类型对象
String anotherString = (String)anObject;
int n = value.length;
// 3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回false
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
// 4. 按照字典序,从前往后逐个字符进行比较
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("Hello");
// s1、s2、s3引用的是三个不同对象,因此==比较结果全部为false
System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false
// equals比较:String对象中的逐个字符
// 虽然s1与s2引用的不是同一个对象,但是两个对象中放置的内容相同,因此输出true
// s1与s3引用的不是同一个对象,而且两个对象中内容也不同,因此输出false
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
}

3. int compareTo(String s) 方法: 按照字典序进行比较

equals 不同的是, equals 返回的是 boolean 类型,而 compareTo 返回的是 int 类型。具体比较方式:
1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
2. 如果前 k 个字符相等 (k 为两个字符长度最小值 ) ,返回值两个字符串长度差值
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("abc");
String s4 = new String("abcdef");
System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1
System.out.println(s1.compareTo(s3)); // 相同输出 0
System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3
}

4. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较

public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("ABc");
String s4 = new String("abcdef");
System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1
System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0
System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出长度差值 -3
}

方法整合+分析代码实例

public class MainCompare {public static void main4(String[] args) {String jkl1 = "Abcd";String jkl2 = "abcd";//忽略大小写比较大小System.out.println(jkl1.compareToIgnoreCase(jkl2));}public static void main3(String[] args) {//compareTo函数利用ASLLOC的值来比较字符串大小//ifA>B,那么返回负数,<返回正数,=返回0String A = "hello";String B = "world";String C = "world";System.out.println(A.compareTo(B));System.out.println(B.compareTo(A));System.out.println(B.compareTo(C));/** compareTo函数比较逻辑:* 1.如果两个字符串的长度是一样的,那么第一个不一样的字符的大小就是整个字符串的大小* 2.如果两个不一样长,那么优先比较两者的差值,在这个差值范围内,有不一样的字符就能* 比较出来,但如果都一样,那么谁长谁就大* */}public static void main2(String[] args) {String jkl1 = "hello";String jkl2 = "hello";//没有new来修饰的话,输出trueSystem.out.println(jkl1 == jkl2);}public static void main1(String[] args) {String str1 = new String("hello");String str2 = new String("hello");//new两者开辟空间位置不一样,所以输出falseSystem.out.println(str1 == str2);System.out.println("==============");//两者内容一样,输出true//因为equal被重写System.out.println(str1.equals(str2));}}

2.3 字符串查找

public class MainSeek {public static void main(String[] args) {String jkl1 = "abcd";//从前往后找输出数组字符串指定位置的字符 cchar ch = jkl1.charAt(2);System.out.println(ch);System.out.println("==============");//indexOf前往后位置查找,找不到返回-1int index = jkl1.indexOf('c',3);System.out.println(index);System.out.println("==============");//lastIndexOf从后往前找String jkl2 = "abcdabcd";//由于lastIndexOf方法寻找的是 最后一次出现 的指定字符int index2 = jkl2.lastIndexOf('b');//从6的位置下标往前找int index3 = jkl2.lastIndexOf('c',5);System.out.println(index2);System.out.println(index3);}}

2.4 字符串转化

public class MainChange {//4格式化public static void main(String[] args) {String s = String.format("%d-%d-%d", 2019, 9,14);System.out.println(s);}//3字符串转数组public static void main3(String[] args) {String s = "hello";// 字符串转数组char[] ch = s.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.print(ch[i]);}System.out.println();// 数组转字符串String s2 = new String(ch);System.out.println(s2);}//2大小写之间的转换public static void main2(String[] args) {String s1 = "hello";String s2 = "HELLO";// 小写转大写,开辟空间产生了新的字符System.out.println(s1.toUpperCase());// 大写转小写System.out.println(s2.toLowerCase());}//1数组和字符串的转换static class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "姓名:" + name + ", 年龄:" + age;}}// 可以使用静态类型static的main能运行public static void main1(String[] args) {// 数字转字符串// valueOf函数会重写String s1 = String.valueOf(1234);String s2 = String.valueOf(12.34);String s3 = String.valueOf(true);// 构造Student重写toString方法,返回你想要的字符串表示。String s4 = String.valueOf(new Student("Hanmeimei", 18));System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);System.out.println("=================================");// 字符串转数字// 转化成整形int data1 = Integer.parseInt("1234");// 转化成Double类型double data2 = Double.parseDouble("12.34");System.out.println(data1);System.out.println(data2);}
}

2.5字符串替换

public class MainReplace {public static void main(String[] args) {String str = "abcdab";//1把所有的ab换成jkl//生成空间创造出了新的字符串String ret = str.replace("ab","jkl");System.out.println(ret);System.out.println("=====================");//2单字符替换String ret2 = str.replace('a','z');System.out.println(ret2);System.out.println("=====================");//3遇到符合条件的第一个替换String ret3 = str.replaceFirst("ab","kk");System.out.println(ret3);System.out.println("=====================");//4所有符合条件的进行替换String ret4 = str.replaceAll("ab","kk");System.out.println(ret4);}}

2.6字符串拆分

public class MainResolution {public static void main(String[] args) {String str = "name=zhangsan&age=10";//以&作为拆分点,拆分结果放在数组里面String[] strings = str.split("&");for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}System.out.println("=====================");String str2 = "hello work hello jkl";//以空格进行分割,分割为2组String[] strings2 = str2.split(" ",2);for (int i = 0; i < strings2.length; i++) {System.out.println(strings2[i]);}System.out.println("=====================");String str3 = "192.44.56.7.8";//以.进行分割时要添加字符'\\'转义String[] strings3 = str3.split("\\.");for (int i = 0; i < strings3.length; i++) {System.out.println(strings3[i]);}System.out.println("=====================");String str4 = "192\\44\\56\\7\\8";//以\进行分割时要添加字符'\\\\'转义String[] strings4 = str4.split("\\\\");for (int i = 0; i < strings4.length; i++) {System.out.println(strings4[i]);}System.out.println("=====================");String str5 = "name=zhangsan&age=10";//=分割为多组数据时String[] strings5 = str5.split("&|=");for (int i = 0; i < strings5.length; i++) {System.out.println(strings5[i]);}}}

2.7字符串截取

public class MainCutOut {public static void main(String[] args) {String s = "abcde";//截取下标为1,输出后面的数String ret = s.substring(1);//0下标返回新的对象String ret2 = s.substring(0);//指定返回区间//Java中都是[1,4)String ret3 = s.substring(1,4);System.out.println(ret);System.out.println(ret2);System.out.println(ret3);System.out.println("====================");//取出左右两边的空格,不能去掉中间的空格String s1 = "   abc   de   ";System.out.println(s1);String ret1 = s1.trim();System.out.println(ret1);}}


以上是学习String的相关内容,希望能对正在学习的读者提供帮助

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

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

相关文章

Java语言程序设计基础篇_编程练习题***18.33 (游戏:骑士旅途的动画)

目录 ***18.33 (游戏:骑士旅途的动画) 习题思路 代码示例 动画演示 ***18.33 (游戏:骑士旅途的动画) 为骑士旅途的问题编写一个程序&#xff0c;该程序应该允许用户将骑士放到任何一个起始正方形&#xff0c;并单击Solve按钮&#xff0c;用动画展示骑士沿着路径的移动&…

深度学习之表示学习 - 贪心逐层无监督预训练篇

引言 在人工智能的浩瀚星空中&#xff0c;深度学习以其强大的数据处理与模式识别能力&#xff0c;成为了一颗璀璨的明星。而表示学习&#xff0c;作为深度学习的核心基石之一&#xff0c;正引领着这一领域不断突破边界。表示学习旨在将原始数据转换为更加抽象、更有意义的特征…

leetcode第二十六题:删去有序数组的重复项

给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c;你…

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

Eclipse 工作空间

Eclipse 工作空间 Eclipse 工作空间(Workspace)是 Eclipse IDE 中一个核心概念,它指的是一个用于组织和存储开发项目及相关文件的目录。在 Eclipse 中,所有开发活动都是围绕工作空间展开的。本文将详细介绍 Eclipse 工作空间的概念、配置、使用方法,以及如何通过优化工作…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型&#xff0c;表示真或假true, false用于条件判断&#xff0c;例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

【系统架构设计师】专题:中间件技术

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、中间件概述二、中间件特点三、中间件的分类四、中间件产品介绍一、中间件概述 中间件(middleware) 是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处在操作系统、网络和数据库之上,应用软件的下层…

着色器ShaderMask

说明 实现一个渐变进度条&#xff0c;要求&#xff1a; 颜色渐变的过程是循序渐进的&#xff0c;而不是看起来像是将渐变条逐渐拉长了。 效果 源码 // 渐变进度条Stack(children: [// 背景色板Container(width: 300,height: 8,decoration: BoxDecoration(borderRadius: Bord…

vue2知识汇总

vue2.x 0. 参考文档 https://cn.vuejs.org/v2/api/https://cn.vuejs.org/v2/guide/1. 发展历程 2014.2 诞生 2015.10 vue1.0发布 2016.4 vue2.0发布预览版&#xff0c; 10月出正式版本 2020.4 vue3.0发布预览版 9.18正式版本2. 概述 声明式渲染 --- 组件系统 ---…

ollama 部署教程(window、linux)

目录 一、官网 二、安装方式一&#xff1a;window10版本下载 三、安装方式二&#xff1a;linux版本docker 四、 模型库 五、运行模型 六、API服务 七、python调用 ollama库调用 langchain调用 requests调用 aiohttp调用 八、模型添加方式 1.线上pull 2.导入 GGU…

Parallels Desktop 20 for Mac 推出:完美兼容 macOS Sequoia 与 Win11 24H2

Parallels Desktop 20 for Mac 近日正式发布&#xff0c;这一新版本不仅全面支持 macOS Sequoia 和 Windows 11 24H2&#xff0c;还在企业版中引入了一个全新的管理门户。新版本针对 Windows、macOS 和 Linux 虚拟机进行了多项改进&#xff0c;其中最引人注目的当属 Parallels …

【AI写作】介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用

【AI写作】介绍 Docker 的基本概念和优势&#xff0c;以及在应用程序开发中的实际应用 浅浅的玩一下这个 AI 写作&#xff0c;本内容全为 AI 生成&#xff0c;仅为 AI 观点&#xff0c;无作者本人的观点。 Docker是一个开源的容器化平台&#xff0c;它可以轻松地将应用程序及…

C++编程语言:基础设施:源文件和程序(Bjarne Stroustrup)

第15章 源文件和程序 (Source Files and Programs) 目录 15.1 单独编译(Separate Compilation) 15.2 链接(Linkage) 15.2.1 文件局部名(File-Local Names) 15.2.2 头文件(Header Files) 15.2.3 一次定义原则(The One-Definition Rule) 15.2.4 标准库头文件 1…

基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别

基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别 手扶电梯 行为识别 可检测有人正常行走&#xff0c;有人 跌倒&#xff0c;有人逆行三种行为 跌倒检测 电梯跌倒 扶梯跌倒 人体行为检测 YOLOv8LSTM。 基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别&#xf…

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时&#xff0c;我们常常需要穿过表面看本质。FFT&#xff08;快速傅里叶变换&#xff09;就是这样一种强大的工具&#xff0c;它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界&#xff0c;了解它是如何将时域信号转化为频域…

力扣(leetcode)每日一题 815 公交路线 (图的宽度优先遍历变种)

815. 公交路线 - 力扣&#xff08;LeetCode&#xff09; 题干 给你一个数组 routes &#xff0c;表示一系列公交线路&#xff0c;其中每个 routes[i] 表示一条公交线路&#xff0c;第 i 辆公交车将会在上面循环行驶。 例如&#xff0c;路线 routes[0] [1, 5, 7] 表示第 0 辆…

如何将Excel表格嵌入Web网页在线预览、编辑并保存到自己服务器上?

猿大师办公助手作为一款专业级的网页编辑Office方案&#xff0c;不仅可以把微软Office、金山WPS和永中Office的Word文档内嵌到浏览器网页中实现在线预览、编辑保存等操作&#xff0c;还可以把微软Office、金山WPS和永中Office的Excel表格实现网页中在线预览、编辑并保存到服务器…

python中ocr图片文字识别样例(二)

一、说明 本次解决图片相关出现中文乱码问题&#xff0c;属于上篇文章的优化&#xff0c;前提条件依赖上篇文章的包&#xff0c;当然ocr的具体应用场景很多&#xff0c;根据自身需求进行调整 二、具体实现 2.1 代码实现&#xff1a; # -*- coding: utf-8 -*- import easyoc…

3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…

内网穿透软件有哪些?

目录 神卓互联 花生壳 FRP Ngrok Cpolar Lanproxy 小蚂蚁 内网穿透软件是帮助用户实现从外部网络访问内部网络资源的工具&#xff0c;这对于远程办公、网络调试、私有项目展示等方面非常有用。以下是一些常用的内网穿透软件&#xff1a; 神卓互联 神卓互联&#xff1a…