当前位置: 首页 > news >正文

JavaSE基础 (认识String类)

一,什么是String类

在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提 供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字 符串应用又非常广泛,因此Java语言专门提供了String类

二,常用方法

2.1字符串构造方法

既然了解了String类,我们如何初始化它呢。

我们有三种常见方法,

第一种是直接引用

String name = "小明";

第二种是创建新对象,引用对象

String name1 = new String("小华");

第三种是用字符数组转换

        char[] str = new char[]{'1','2','3','4'};String name2 = new String(str);

我们来打印一下

都能正常输出。

我们说过String是引用类型,那么在内存是怎么划分的呢

我们的name在堆上会指向我们在栈上创建的新对象,都是对我们的对象进行操作的。

在java中我们引用起来的也是引用类型,我们来证明下。

        int sz = "12345".length();System.out.println(sz);

我们能对这个字符串.出我们length();方法,说明“12345”也是一个引用类型。

2.2String对象的比较

我们在java中肯定会涉及到字符串的比较的,那我们该如何去做呢,

第一个就是直接用==进行比较

什么?我们能直接去比吗,是的,我们在java中对于基础数据类型可以直接用==比较他们的值。

而对于引用类型我们比的是他们的地址,我们来测试一下

        String student1 = new String( "小明");String student2 = new String( "小明");System.out.println(student1 == student2);

我们看到我们创建了两个对象,他们字符串的内容都是小明,那么他们会输出相等的true吗

答案是不一样的,那我们只能去比较字符串的地址,怎么才能去比较具体的内容呢,我们string类型提供了我们equals方法。

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

System.out.println(student1.equals(student2));

        

我们看到答案是相同,String类重写了我们的equals方法,让他每一个字符串按照词典顺序去比较,那我们如何忽略大小写去比呢,就像我们在网页登录时验证码是忽略大小写的,

    public static void main(String[] args) {String student1 = new String( "Hello");String student2 = new String( "hello");System.out.println(student1 == student2);System.out.println(student1.equals(student2));}

我们看到用这个方法是做不到的,

System.out.println(student1.equalsIgnoreCase(student2));

我们使用这个方法,就能忽略大小写对字符串的影响。

我们还可以不返回true和flase,我们可以根据字符串比较字母的差值,返回对应的数字,我们用

compareto方法来实现,

    public static void main(String[] args) {String a = new String("abc");String b = new String("abd");System.out.println(a.compareTo(b));}

我们看到返回值为负一,第一个字符串小于第二个字符串。

同样我们也可以用compareto来忽略字符串大小写的比较。

public static void main(String[] args) {String a = new String("abc");String b = new String("abC");System.out.println(a.compareTo(b));System.out.println(a.compareToIgnoreCase(b));}

我们看到,第二种方法是已经忽略了字符串大小写了的,第一种没有忽略,差值正好是32。

2.3字符串查找

char charAt(int index),第一个方法,可以返回字符串具体下标的值,不能返回越界的下标值。

我们来举例子

        String arr = new String("Hello");char s = arr.charAt(0);System.out.println(s);

我们来访问arr字符串的零下标。

成功访问到了。

        String arr = new String("Hello");for (int i = 0; i < arr.length(); i++) {char s1 = arr.charAt(i);System.out.print(s1);}

我们还可以一个一个访问通循环打出我们的字符串。

int indexOf(int ch),int indexOf(int ch, int fromIndex)我们可以通过index函数来找我们想要的字符或者字符串第一次出现的位置,fromlndex我们指定开始寻找的位置,我们来举个例子

        String name = new String("Hello World");System.out.println(name.indexOf('o'));System.out.println(name.indexOf('o',5));System.out.println(name.indexOf("ll"));System.out.println(name.indexOf("ll",5));

我们可以看到,我们找o出现的位置5下标之后o出现的位置,ll出现的位置,5之后ll出现的位置

运行结果非常明显,第一次o出现在4下标,5之后是7下标,ll出现在2下标5之后ll并没有出现返回负一。

int lastIndexOf(int ch),我们不光有从前往后找,还有从前往后找,用法和IndexOf()用法一样。

        String name = new String("Hello World");System.out.println(name.lastIndexOf('o'));System.out.println(name.lastIndexOf('o',5));System.out.println(name.lastIndexOf("ll"));System.out.println(name.lastIndexOf("ll",5));

结果就完全不一样了。

2.4转化

我们在数值和字符串之间也可以发生转换,比如,我们可以把整数,小数,布尔类,甚至一个对象都转化成字符串,我们使用valueOf

我们来尝试下

    public static void main(String[] args) {int a = 1234;double b = 12.34;boolean c = true;System.out.println(String.valueOf(a));System.out.println(String.valueOf(b));System.out.println(String.valueOf(c));System.out.println(String.valueOf(new Student("小明",18)));}

还有我们的类

public class Student {public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}public String toString(){return name + age;}
}

我们试着把这4种类型转化为字符串我们看看是否能成功

我们看到了虽然是输出了,但是这到底是不是字符串呢,我们加一下试试就知道了。

    System.out.println(String.valueOf(a)+11);

加上11.我们看看能不能出结果

哎我,这是什么答案呢,没有相加,它实际上变成了一个新的字符串,哇,那么我们java的字符串就可以直接相加了吗,可以但不推荐,为啥呢,因为太慢了,这个过程看似很短,但是它设计了很多创建对象的过程,并不是,直接使用一个对象进行操作,所以效率很低下我们后面再讨论怎么解决这个情况

我们把这4种类型转化成了字符串,那么怎么把它从字符串转化回来呢,

我们可以用包装类

        int a = Integer.parseInt("1234");double b = Double.parseDouble("12.34");boolean c = Boolean.parseBoolean("false");System.out.println(a+11);System.out.println(b);System.out.println(c);

我们看到结果确实为数字我们可以进行加减

之前提到了字符数组可以转化为字符串,而字符串也可以转化为字符数组

我们来进行演示

    public static void main(String[] args) {String s = new String("Hello World");char[] str = s.toCharArray();for (int i = 0; i < str.length; i++) {System.out.print(str[i]);}}

成功转化

在java中依旧保留了c语言格式化输出的特点

比如%d

    public static void main(String[] args) {String s = String.format("%d-%d %d",1,2,3);System.out.println(s);}

我们这样就完成了。

2.字符串替换

我们使用replaceall,repleaceafist, replace,进行字符串指定字符,或者单个字符的替换。

        String s = new String("Hollow Horld");System.out.println(s.replace('H','W'));System.out.println(s.replaceAll("o","w"));System.out.println(s.replaceFirst("o","ss"));}

+First是代表替换第一次的,ALL为全部替换,很灵活的函数

2.6字符串拆分

我们还可以进行字符串的拆分,通常用到网页网址上的拆分,我们继续来举例子:

        String web = new String("student&0x123456");String[] Strings = web.split("&");for (int i = 0; i < Strings.length; i++) {System.out.println(Strings[i]);}

我们使用splist函数进行划分,传入&表示我我们要对&左右的进行操作,它会把字符串拷贝为两份,而不是将之前的字符串一分为二,我们将字符串放到数组即可遍历,同样我们也可以遍历多个字符串,并且特殊的是,我们在拆分.,+,|,*时都有使用转义字符//进行声明,如果是/字符我们要写成。

2.7字符串截取

我们使用substring()进行字符串截取。

        String name = new String("123425516");String s = name.substring(7);System.out.println(s);

我们来看结果

从第7个位置截取到最后

2.8其他操作方法

我们还有很多很多的字符串操作方法,toUpperCase, toLowerCase,tim()等等·这里就不一一列举了

字符串时不可变的,里面的内容无法修改,我们之前在距离的时候都是再创建一个字符串,所以我们使用StringBulider和StringBuffer进行字符串的修改这里面不仅保留了字符串的功能还有很多的扩展功能这里就不一一列举了。我们下篇文章来讲

相关文章:

JavaSE基础 (认识String类)

一&#xff0c;什么是String类 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提 供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&…...

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…...

Java学习Day19:基础篇9

包 final 权限修饰符 空着不写是default&#xff01; 代码块 1.静态代码块 1.静态代码块优于空参构造方法 2.静态调用只被加载一次&#xff1b; 静态代码块在Java中是一个重要的特性&#xff0c;它主要用于类的初始化操作&#xff0c;并且随着类的加载而执行&#xff0c;且只…...

如何撤销git add ,git commit 的提交记录

一、撤销git commit ,但是没有push到远程的记录 git reset --hard HEAD~1 销最近的一次提交&#xff0c;并且丢弃所有未提交的更改 二、撤销git add ,但是没有提交到本地仓库的记录 git reset 三、原理 Git 工作流程的简要说明&#xff1a; 工作目录&#xff08;Working …...

Postman环境变量的高级应用:复杂条件逻辑的实现

Postman环境变量的高级应用&#xff1a;复杂条件逻辑的实现 在Postman中&#xff0c;环境变量是管理和定制API请求的强大工具。通过使用环境变量&#xff0c;可以轻松地在不同环境之间切换&#xff0c;如开发、测试和生产环境。然而&#xff0c;环境变量的真正威力在于它们能够…...

AI问答-供应链管理:理解医疗耗材供应链SPD板块

医疗耗材供应链SPD板块是一个专注于医用耗材供应链管理的关键领域&#xff0c;它融合了供应链管理理论、物流信息技术以及环节专业化管理手段&#xff0c;旨在保证院内医用耗材的质量安全、满足临床需求&#xff0c;并提升医院的整体运营效率。以下是对医疗耗材供应链SPD板块的…...

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…...

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…...

知乎信息流广告怎么投?一文读懂知乎广告开户及投放!

作为中国领先的问答社区&#xff0c;知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广&#xff0c;云衔科技提供了全方位的知乎广告开户及代运营服务&#xff0c;助力您的品牌在知乎上实现快速增长。 一、知…...

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…...

win11管理员账户为啥不能改?win11怎么更改管理员账户名称?

文章目录 亲测有效&#xff01;&#xff01;&#xff01;&#xff01;...

Spring Security学习笔记(三)Spring Security+JWT认证授权流程代码实例

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上两篇文章介绍了Spring Security的整体架构以及认证和鉴权模块原理。本篇文章就是基于Spring Security和JWT的一个demo 一、JWT简介 JWT&#xff08;JSON Web Token&#xff09;&#xff0c…...

精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器

精装房、旧房改造智能家居&#xff0c;单火线也有“救”了单火模块 零线发生器 史新华 以前写过关于智能家居没有预留零线&#xff0c;导致无法安装零火开关&#xff0c;也没办法装触控屏&#xff0c;主要原因还是无法通过零火线给设备供电。今年最火的一款思万奇零线发生器救…...

使用URLSearchParams获取url地址后面的参数(window.location.href)

function getUrlParams(url) {const urlStr url.split(?)[1];const urlSearchParams new URLSearchParams(urlStr);return Object.fromEntries(urlSearchParams.entries()); }const info getUrlParams(window.location.href); // info是一个对象&#xff0c;包含url携带参数…...

计算机网络03

文章目录 重传机制超时重传快速重传SACK 方法Duplicate SACK 滑动窗口流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症 拥塞控制慢启动拥塞避免算法拥塞发生快速恢复 如何理解是 TCP 面向字节流协议&#xff1f;如何理解字节流&#xff1f;如何解决粘包&#xf…...

linux每个目录都是干啥的???linux目录说明

很全&#xff0c;没事看看&#xff0c;记住 / 虚拟目录的根目录。通常不会在这里存储文件 /bin 二进制目录,存放许多用户级的GNU工具启动目录,存放启动文件 /etc 系统配置目录 /dev 设备目录,Linux在这里创建设备节点系统配置文件目录 /home 主目录,Linux在…...

DB2-Db2StreamingChangeEventSource

提示&#xff1a;Db2StreamingChangeEventSource 类主要用于从 IBM Db2 数据库中读取变更数据捕获 (CDC, Change Data Capture) 信息。CDC 是一种技术&#xff0c;允许系统跟踪数据库表中数据的更改&#xff0c;这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景…...

在当前的数字化时代,Cobol 语言如何与新兴技术(如云计算、大数据、人工智能)进行融合和交互?

Cobol语言作为一种古老的编程语言&#xff0c;与新兴技术的融合和交互需要一些额外的工作和技术支持。以下是一些将Cobol与新兴技术结合的方法&#xff1a; 云计算&#xff1a;Cobol程序可以迁移到云平台上运行&#xff0c;通过云提供的弹性和可扩展性&#xff0c;为Cobol应用程…...

使用SDL库以及C++实现的简单的贪吃蛇:AI Fitten生成

简单使用AI代码生成器做了一个贪吃蛇游戏 设计的基本逻辑都是正确的&#xff0c;能流畅运行 免费准确率高&#xff0c;非常不错&#xff01;支持Visual Studio系列 Fitten&#xff1a;https://codewebchat.fittenlab.cn/ SDL 入门指南&#xff1a;安装配置https://blog.csdn.n…...

【C++标准库】模拟实现string类

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参&#xff08;默认&#xff09;构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...