Java ==> String类(字符串)

文章目录

  • 一、认识String类
    • 1、创建String对象
    • 2、不可变的String
    • 3、字符串常量池
  • 二、字符串常用操作
    • 1、字符串比较
      • 1.1 用“==”比较
      • 1.2 用equals()方法比较
      • 1.3用compareTo()方法进行比较
    • 2、获取字符串长度
    • 3、字符串查找
    • 4、字符串转换
      • 4.1valueOf()数值转换为字符串
      • 4.2字母大小写转换
    • 5、字符串替换
    • 6、字符串拆分
    • 7、字符串截取
  • 总结



提示:以下是本篇文章正文内容,下面案例可供参考

一、认识String类

在Java中,字符串是一个由字符序列组成的对象,它用于存储和处理文本数据。字符串是Java编程语言中最常用的数据类型之一,用于表示一系列字符,例如名字、地址、句子等。在Java中,字符串是由java.lang.String类来表示的,这意味着你可以利用这个类提供的丰富的方法来创建、访问以及操作字符串。

1、创建String对象

我们常见的创建String对象,一般有以下的三种:

public class Test {public static void main(String[] args) {//创建String对象的三种常见方法//使用字面量创建字符串String s1 = "hello";System.out.println(s1);//输出hello//使用构造器创建字符串String s2 = new String("hello" );System.out.println(s2);//输出hello//使用char数组创建字符串char[] chars = {'h', 'e', 'l', 'l', 'o'};String s3 = new String(chars);System.out.println(s3);//输出hello}
}

2、不可变的String

在 Java 中,String 类是一个非常重要的类,它用来表示文本字符串,不仅可以表示数字,英文,还可以表示中文等文本。String 类的对象是不可变的,这意味着一旦创建了一个 String 对象,它的值就不能被改变,我们通过JDK 1.8的文档可以查看到:

在这里插入图片描述
由此我们还可以知道,String类是继承了多接口的,一旦创建了String对象就不可以被改变,但可以共享,我们来举一个例子就会一目了然:

public class Test {public static String upcase(String s) {return s.toUpperCase();//将字符串的每个字母都变成大写}public static void main(String[] args) {String a = "hello";System.out.println(a);//输出helloString b = upcase(a);System.out.println(b);//输出HELLOSystem.out.println(a);//输出hello}
}

String类中每一个看起来会修改String值的方法,其实都是创建了一个全新的String对象,用来包含被修改过的String对象,而最初的String对象则是没有任何变化的。
当我们把a传给upcase()方法时,实际传递的引用的一个拷贝。每当我们把String对象作为方法的参数时,都会进行复制一份引用,则该对象的值始终没有被改变。

3、字符串常量池

在Java中,字符串常量池是一个特殊的内存区域,它用来存储字符串字面量。当你使用字符串字面量来创建字符串时,JVM会检查字符串常量池中是否已经有相同的字符串。如果有,就会复用已有的字符串对象;如果没有,就会创建一个新的字符串对象,并将其放入字符串常量池中。这种方式有助于减少重复字符串的创建,从而节省内存资源。
我们给个例子更加直观的理解:

public class Test {public static void main(String[] args) {// 字符串字面量,将复用字符串常量池中的对象String str1 = "hello";String str2 = "hello";// 使用new关键字创建的新对象,不使用字符串常量池String str3 = new String("hello");System.out.println(str1 == str2);  // true,因为str1和str2引用的是同一个对象System.out.println(str1 == str3);  // false,因为str3是新创建的对象System.out.println(str1.equals(str3)); // true,因为内容相同}
}

字符串常量池的影响:
内存效率: 由于字符串常量池的存在,相同的字符串字面量只会在内存中保存一份,这对于频繁创建相同字符串的应用来说是非常有用的。
性能提升: 使用字符串常量池可以避免创建不必要的对象,减少垃圾回收的压力,从而提高程序的性能。
线程安全性: 字符串常量池中的字符串是不可变的,这意味着它们的内容不能被更改,因此可以安全地在多个线程之间共享。
字符串比较: 当比较两个通过字符串字面量创建的字符串时,可以使用 == 操作符来检查它们是否引用同一个对象。这是因为这些字符串都指向字符串常量池中的同一个位置。但是,对于通过new String()创建的字符串,即使它们的内容完全相同,也必须使用equals()方法来比较内容,因为它们可能是不同的对象。

二、字符串常用操作

1、字符串比较

1.1 用“==”比较

我们通常使用“==”来比较是否引用同一对象,同一对象则返回true,否则返回false
例:

public class Test {public static void main(String[] args) {//字符串比较String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = s1;String s5 = s3;System.out.println(s1 == s2);//trueSystem.out.println(s1 == s3);//falseSystem.out.println(s1 == s4);//trueSystem.out.println(s3 == s5);//true}}

1.2 用equals()方法比较

我们查看JDK1.8文档可以看到,equals()方法是boolean类型的
在这里插入图片描述
equals()先判断是否引用的同一对象或参数是否为null,如果为同一对象则直接返回true,为null则返回false,否则继续比较其引用对象的内容是否相等。
在这里插入图片描述

equals()用于比较两个字符串的内容,equals()方法是String类中的方法,我们可以直接通过创建的String对象去直接引用;
例:

public class Test {public static void main(String[] args) {String s1 = "hello";String s2 = new String("hello");System.out.println(s1.equals(s2));//true}
}

我们还可以使用equalsIgnoreCase()来比较,这个方法可以忽略大小写进行比较,常用于我们的日常使用的验证码当中,例如:

public class Test {public static void main(String[] args) {String s1 = "hello";String s2 = "HELLO";System.out.println(s1.equalsIgnoreCase(s2));//true}
}

1.3用compareTo()方法进行比较

compareTo()也是String类中的一个可以直接引用的方法,它的返回值为int(整型),我们点进这个方法进一步了解一下

在这里插入图片描述
我们可以很清楚的明白,compareTo()是如何进行比较的
在这里插入图片描述
compareTo()和compareToIgnorCase()的区别就是,后者不区分大小写进行比较
例如:

public class Test {public static void main(String[] args) {String s1 = "aaabbb";String s2 = "AAABBB";System.out.println(s1.compareTo(s2));//输出32System.out.println(s1.compareToIgnoreCase(s2));//输出0}}

2、获取字符串长度

我们通过String对象.length就可以获取我们字符串的长度。
例:

public class Test {public static void main(String[] args) {//字符串长度String s1 = "asdfghjklzxcvbnmqwertyuiop";System.out.println(s1.length());//输出26}
}

3、字符串查找

为大家列举了一写关于字符串查找的常用方法:

方法功能
char charAt(int index)返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常
int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, intfromIndex)从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
int indexOf(String str, intfromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, intfromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str, intfromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

例:

在这里插入图片描述

4、字符串转换

4.1valueOf()数值转换为字符串

我们可以通过String类中的valueOf()方法,对数值进行转换,将数值转换为字符串,valueOf()的参数许多,如下:
在这里插入图片描述
我们可以看到它是被static所修饰的所以可以直接调用。
例:

public class Test {public static void main(String[] args) {//String.valueOf()方法可以将其他类型的值转换为字符串String s1 =  String.valueOf(1234);System.out.println(s1);//输出1234String s2 =  String.valueOf(1234.5678);System.out.println(s2);//输出1234.5678String s3 =  String.valueOf(1234567890123L);System.out.println(s3);//输出1234567890123String s4 =  String.valueOf(1234.567F);System.out.println(s4);//输出1234.567String s5 =  String.valueOf('a');System.out.println(s5);//输出aString s6 =  String.valueOf(true);System.out.println(s6);//输出trueString s7 =  String.valueOf("hello world");System.out.println(s7);//输出hello world}
}

4.2字母大小写转换

我们要将字符串中的字母进行大小写的转换,我们需要用到toLowerCase() 和toUpperCase() 方法。
我们直接用String对象去 .toLowerCase() 就可以使其字母变为小写,.toUpperCase() 就可以使其字母变为大写。
例:

public class Test {public static void main(String[] args) {//字符串大小写转换String s1 = "Hello World";String s2 = "hello world";System.out.println(s1.toLowerCase());//输出hello worldSystem.out.println(s2.toUpperCase());//输出HELLO WORLD}}

其操作也是非常的快捷。

5、字符串替换

字符串替换在我们生活中也是很常见的,我们在游戏中会经常看到一下“”的字符串,其是把一些敏感字替换成了“”的字符。
主要是有以下两种方法:
在这里插入图片描述
例:

public class Test {public static void main(String[] args) {//字符串替换String s1 = "aaabbb";String s2 = s1.replaceFirst("a", "A");String s3 = s1.replaceAll("a","A");System.out.println(s2);//输出AbbbcccSystem.out.println(s3);//输出aabbDbbD}
}

6、字符串拆分

字符串拆分可以将我们一个字符串以指定的分隔符进行拆分,拆成若干个子字符串,也可以按照指定的份数进行拆分,主要分为2种:
在这里插入图片描述
例:

public class Test {public static void main(String[] args) {String s1 = "hello world";String[] arr = s1.split(" ");for (String s : arr) {System.out.println(s);}//字符串拆分,指定分隔符和最大分割次数String s2 = "hello,world,hello,java,hehe";arr = s2.split(",",5);for (String s : arr) {System.out.println(s);}String s3 = "101.111.321.112";arr = s3.split("\\.",4);for (String s : arr) {System.out.println(s);}}
}

输出:
在这里插入图片描述

注意事项:

  1. 字符"|“,”*“,”+"都得加上转义字符,前面加上 “\” .
  2. 而如果是 “” ,那么就得写成 “\\” .
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

7、字符串截取

给定字符串我们可以对其截取我们想要的部分,这时候我们就可以使用substring()方法,如下:
在这里插入图片描述

public class Test {public static void main(String[] args) {//字符串截取String s1 = "hello world";System.out.println(s1.substring(5));//输出 worldSystem.out.println(s1.substring(0, 5));//输出lloSystem.out.println(s1.substring(2, s1.length()));//输出llo world}
}

在日常生活中我们的手机号,在应用上一般都显示为188****1234这样的形式,其实也是把中间的给替换掉了,我们可以结合字符串的替换和截取进行操作,如下:

public class Test {public static void main(String[] args) {String s1 = "18899991234";System.out.println(s1.replaceAll(s1.substring(3, 7), "****"));}
}

这样我们不难发现这些方法是可以互相调用的,其操作也是相对很好理解的,我们多加进行练习,便可以使用的更加行云流水。



总结

这些是String类的一些较为常用的知识和方法,当然String类方法不止这些,如果还想了解更多的方法我们可以进行查阅JDK1.8的文档进行学习,各位铁子找不到的话可以私信我,我给发一份。
非常感谢大家阅读完这篇博客。希望这篇文章能够为您带来一些有价值的信息和启示。在未来的日子里,我们将继续探索更多关于博客技术的精彩内容,敬请期待。如果您有任何问题或建议,欢迎在评论区留言,我们一起交流学习。
在这里插入图片描述

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

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

相关文章

Qt中的Model与View 4:QStandardItemModel与QTableView

目录 QStandardItemModel API QTableView 导航 视觉外观 坐标系统 API 样例:解析一个表格txt文件 QStandardItemModel QStandardItemModel 可用作标准 Qt 数据类型的存储库。它是模型/视图类之一,是 Qt 模型/视图框架的一部分。它提供了一种基于…

【SpringMVC】传递json,获取url参数,上传文件

【传递json数据】 【json概念】 一种轻量级数据交互格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,其本质上是字符串,负责在不同的语言中数据传递与交换 json数据以字符串的形式体现 【json字符串与Java对象互转…

Java JUC(四) 自定义线程池实现与原理分析

目录 一. 阻塞队列 BlockingQue 二. 拒绝策略 RejectPolicy 三. 线程池 ThreadPool 四. 模拟运行 在 Java基础(二) 多线程编程 中,我们简单介绍了线程池 ThreadPoolExecutor 的核心概念与基本使用。在本文中,我们将基于前面学…

go-logger v0.27.0 - 并发性能为官方库 10 倍

go-logger是一个高性能的 golang 日志库,旨在提供快速、轻量级的日志记录功能 Github 使用文档 v0.27.0 更新内容 优化内存分配优化写数据性能增加日志属性自定义函数增加各个日志级别格式化打印函数 说明 性能优化是该版本最重要的更新内容。性能优化的结果&…

【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师

一、IS-IS的汇总 1、可以有效减少在LSP中发布的路由条目,减小对系统资源的占用。 2、会减少LSP报文的扩散,接收到该LSP报文的其他设备路由表中只会出现一条聚合路由。 3、可以避免网络中的路由震荡,提高了网络的稳定性。 4、被聚合的路由可以是IS-IS路由,也可以是被引入…

邮件发送excel带预览excel功能

excel 打开后的内容: 思路: 1、邮件发送excel 是作为附件发送出去的; 2、excel 预览是,必须另外点击预览按钮,并不能直接预览邮件内容然后在邮件主体内容展示出来 根据以上两点基本没法实现 邮件发送后邮件自带 预览功能。 伪方法…

HCIA(DHCP服务)

第三节 开启DHCP服务 创建地址池 调用全局服务 [R1]dhcp enable 开启DHCP服务 [R1]ip pool AA 创建地址池 [R1-ip-pool-AA]network 192.168.1.0 mask 24 写入网段 [R1-ip-pool-AA]gateway-list 192.168.1.1 写入网关 [R1-ip-pool-AA]dns-list 8.8.8.8 114.1…

java项目之文理医院预约挂号系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的文理医院预约挂号系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 本系统的使用角色可…

A4-C四驱高防变电站巡检机器人

在电力行业数字化、智能化转型进程中,搭载多模态成像传感器的变电站巡检机器人、视频监控设备逐渐取代传统人工,成为变电设备状态监测的主要工具。变电站巡检机器人具有全天候、非接触式、多参量测量等特点,结合内置人工智能算法完成仪表识别…

【华为HCIP实战课程三十】中间到中间系统协议IS-IS路由渗透及TAG标识详解,网络工程师

一、路由泄露 1、默认情况Level 1不会学到Level2的明细路由,L2可以学到L1的明细路由 2、FIB数据转发,路由负载,通过随机数据中的五元组hash,hash值决定数据走哪条链路 R1设备ping和telnet通过抓包查看走的都是S1/0/0接口 抓包进行过滤;ip.a…

面向对象三大特征之一:封 装

1、特点 封装是面向对象的核心思想,两层含义:一是一个整体(把对象的属性和行为看成一个整体,即封装在一个对象种),二是信息隐藏,对外隐藏,但可以通过某种方式进行调用。 2、访问权…

引领汽车行业未来,3D数字化技术如何改变汽车行业?

新能源汽车行业加速发展,新车型密集发布,汽车保有量和车龄的增加,也同时点燃了汽车后市场的增长引擎。对于车企而言,如何全方面优化汽车从研发、生产、售后到营销的各个环节,以便适应快速变化的市场需求? 1…

使用MongoDB Atlas构建无服务器数据库

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

萌熊数据科技:剑指脑机转入,开启科技新篇章

近日,科技圈传来一则令人瞩目的消息,天津萌熊数据科技有限公司和天津一万年科技发展有限公司在全国范围内大力开展AI加生命科学的主体业务,并明确将朝着脑机转入方向深入发展,引发了行业内外的广泛关注。 天津萌熊数据科技有限公司…

【云备份项目】json以及jsoncpp库的使用

目录 1.JSON 2.什么是 JSON? 3.JSON 发展史 4.为什么要使用 JSON? 5.JSON 的不足 6.JSON 应该如何存储? 7.什么时候会使用 JSON 7.1.定义接口 7.2.序列化 7.3.生成 Token 7.4.配置文件 8.JSON的语法规则 8.1.对象和数组 8.2.JS…

动态规划-两个数组的dp问题——1035.不相交的线

1.题目解析 题目来源:1035.不相交的线 测试用例 2.算法原理 本题实质上就是寻找两个数组的最长公共子序列,所以可以直接移步到 最长公共子序列 的解析博客,那里更加详细的介绍了如何处理最长公共子序列的判断 1.状态表示 由题目可知是两个…

Android13开发恢复出厂设置默认打开WiFi

案例: 测试要求系统恢复出场设置的时候,默认WiFi打开 代码 找到def_wifi_on,将它修改为true即可 修改路径:QSSI.13/packages/services/Car/car_product/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

Spring Boot框架下校园社团信息管理的优化策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理校园社团信息管理系统的相关信息成为必然。…

MySql基础:数据类型

目录 1. 数据类型的整体分类 2. 整数数据类型 2.1 TINYINT 类型 2.2 bit 类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 2.4 字符串类型 2.4.1 char 2.4.3 varchar 2. 5 日期和时间类型 2.6 enum和set类型 补充: 1. 数据类型的整体分类 说明:在…

【测试工具】通过Jmeter压测存储过程

目录 一、存储过程准备1.1、 建立空表1.2、 建立存储过程1.3、调试 二、测试工具准备三、工具配置及执行3.1、配置JDBC Connection Configuration:3.2、配置吞吐量控制器3.3、配置JDBC Request 一、存储过程准备 1.1、 建立空表 CREATE TABLE test_data ( id NUMB…