JAVA学习·String类的常用方法

news2024/11/16 9:34:54

String 类及其创建

String 类的创建

  String 类是 Java 内置的一个类,其完全限定类名是java.lang.String。想要创建一个字符串有多重方式,比如创建字符串"Hello"

String s1 = "Hello"; // 字面量创建
String s2 = new String("Hello"); // 构造函数创建
String s3 = "He" + "llo"; // 字符串连接
String s4 = new String(new char[]{'H','e','l','l','o'}); // 字符数组创建
String s5 = s4.intern();

String 对象在内存中的位置

  上面的s1,s3存在常量池里,而s2,s4存在里。类似于 C 程序的编译,可能编译器在编译String s1 = "Hello"时,将"Hello"存进了可重定位文件的.rodata(只读数据节)中了,并且将这个字符串与s1的联系写进重定位节。s3在编译时预处理,自动计算了"He" + "llo"并也存入.rodata;由于已经有一个"Hello"了,就不再重复加入"Hello",而是直接将s3与之前的那个"Hello"进行重定位。
  s2,s4都是通过new一个新的字符串对象得到的,这个就好比C语言的malloc,分配的空间在内存的堆中。

  s5也是存在常量池里,和s1,s3一样。internString类的一个实例方法,返回字符串对象的字面量。下面是这个方法的 API 注释:
在这里插入图片描述
  从框起来的部分可以看到,intern方法对于str2=str1.intern()处理在内存分配上有两种情况:
1 1 1.str1的字面量已经在常量池里,则直接让str2指向它。此时有str1==str2
2 2 2.str1的字面量不在常量池里,这时str1肯定是在堆里面分配的,JVM会把str1的字面量存入常量池,再令str2指向它。
  所以不管怎么说,通过intern方法得到的引用对象,始终指向常量池

String 类的一些常用方法

字符串比较

  • equalss1.equals(s2)比较s1s2的字面量,如果字面量相等就返回true,否则是false。如果s2==null也是返回false

在 Java 中由于所有非基本数据类型的变量都是引用变量,s1==s2这一语句其实是在判断s1s2是否指向同一个内存区。相当于 C 语言中两个指针==操作。

  • equalsIgnoreCase。忽略大小写的比较。
  • regionMatches。比较部分内容是否相同,这个函数有两个重载的写法:
    • regionMatches(int toffset,String other,int ooffset,int len)。调用s1的该方法,比较s1[toffset]other[ooffset]开始的len个字符是否都相等;如果都相等返回true,否则false
    String s0 = "Java";
    String s2 = "Welcome to Java";
    String s3 = "welcome to java";
    System.out.println(s2.regionMatches(11, s0, 0, 4) ); //true
    System.out.println(s3.regionMatches(11, s0, 0, 4)); //false
    
    • regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 。和上面那个方法用法类似,只是当ignoreCase==true时比较的时候忽略大小写。
    System.out.println(s3.regionMatches(true, 11, s0, 0, 4));//true
    
  • startsWith(s1)判断是否以字符串s1开始。
  • endsWith(s1)判断是否以字符串s1结束。
  • compareTo方法用于比较两个字符串的大小,即第一个不同字符的差值(字典序)。

字符串的长度

  使用length()方法可以返回字符串的长度。注意数组获取长度是length成员,两者不一样。

获取特定位置的字符

  如果是 C 语言直接就是s[index]了,但是 Java 要用s.charAt(index)

连接字符串

  可以直接用加法连接:

String s3 = s1 + s2;

  也可以是调用函数concat

String s3 = s1.concat(s2);

  两者效果一样,但是不会改变s1,s2的值。连接操作返回的是一个独立于s1,s2的新的字符串。

截取字符串

  调用subString方法。有两个重载的subString方法:

  • substring(int beginIndex, int endIndex)返回从beginIndexendIndex-1的片段。
  • substring(int beginIndex)返回从beginIndex到末尾的片段。

字符串转换

  • s1.toLowerCase()s1转换成小写形式,得到新串。
  • s1.toUpperCase()s1转换成大写形式,得到新串。
  • s1.trim()删除s1两端的空格,得到新串。
  • s1.replace(oldChars,newChars)用串newChars替换s1中的所有子串oldChaes,得到新串。

查找字符和字符串

  • indexOf返回字符串中字符或字符串匹配的位置,返回-1表示未找到。
"Welcome to Java".indexOf('W') returns 0.
"Welcome to Java".indexOf('x') returns -1.
"Welcome to Java".indexOf("come") returns 3.
  • indexOf还能加一个参数fromIndex,或者加两个参数beginIndex,endIndex,表示在特定的区间寻找字符/字符串。
"Welcome to Java".indexOf('o‘,5) returns 9.
"Welcome to Java".indexOf("Java", 5) returns 11.
"Welcome to Java".indexOf("java", 5) returns -1.
  • lastIndexOf从字符串末尾开始查找。
"Welcome to Java".lastIndexOf('a') returns 14.

字符数组与字符串的转换

  • 字符串到字符数组,用toCharArray
String s = "Java";
char[ ] charArray = s.toCharArray( );// charArray.length=4
  • 字符数组到字符串,用构造函数,或者静态方法valueOf
String s = new String(new char[ ] {'J','a','v','a'} ); // "Java"
String s = String.valueOf( new char[ ] {'J','a','v','a'} ); // "Java"

基本数据类型和字符串间的转换

  • valueOf方法将基本数据类型转换为字符串
String s1 = String.valueOf(1.0);  //"1.0"
String s2 = String.valueOf(true); //"true"
  • 字符串转换为基本类型:利用包装类
double d = Double.parseDouble(str);
int i = Integer.parseInt(str);
boolean b = Boolean.parseBoolean(str);

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

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

相关文章

IDEA升级web项目为maven项目乱码

今天将一个java web项目改造为maven项目。 首先&#xff0c;创建一个新的maven项目&#xff0c;将文件拷贝到新项目中。 其次&#xff0c;将旧项目的jar包&#xff0c;在maven的pom.xml做成依赖 接着&#xff0c;把没有maven坐标的jar包在编译的时候也包含进来 <build>…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月29日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月29日 星期三 农历四月廿二 1、 首个未成年人游戏退费标准发布&#xff1a;监护人与网游服务提供者将按错担责。 2、 六部门联合印发通知&#xff1a;鼓励加快高清超高清电视机等普及、更新。 3、 神舟十八号航天员乘…

Rocksdb原理简介

100编程书屋_孔夫子旧书网 Rocksdb作为当下nosql中性能的代表被各个存储组件&#xff08;mysql、tikv、pmdk、bluestore&#xff09;作为存储引擎底座&#xff0c;其基于LSM tree的核心存储结构&#xff08;将随机写通过数据结构转化为顺序写&#xff09;来提供高性能的写吞吐时…

上海亚商投顾:沪指冲高回落 电力、电网产业链持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指、创业板指均跌超1%。电力、电网股再度爆发&#xff0c;众智科技、郴电国…

Post Microsoft Build and AI Day 上海开发者日

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 这个六一怎么过&#xff1f;来微软 Reactor&#xff0c;一起过儿童节吧&#xff01; 6月1日&#xff0c;Microsoft Azure & Microsoft Reactor 面向大小朋友特别推出六一特辑&#xff0c;「Post Mic…

Django配置

后端开发&#xff1a; python 解释器、 pycharm 社区版、 navicate 、 mysql(phpstudy) 前段开发&#xff1a; vs code 、 google 浏览器 django 项目配置 配置项目启动方式 创建模型 创建一个应用 在应用中创建模型类 根据模型类生成数据表 创建应用 创建模型类 …

Ps:使用消失点滤镜进行透视贴图

可以在“消失点”滤镜中粘贴 Photoshoop 剪贴板中的图像。 拷贝的贴图可以来自于同一文档或不同文档&#xff0c;但不能是矢量图形。 比如&#xff0c;如果要将文字图层作为贴图&#xff0c;必须先将其栅格化。 一旦粘贴到“消失点”滤镜中&#xff0c;贴图将变为浮动选区&…

量子密钥分发系统基础器件(一):光纤干涉仪

干涉仪的基本原理是利用波的叠加来获得波的相位信息&#xff0c;从而获取实验中所关心的物理量。光纤干涉仪是由光学干涉仪发展而来的&#xff0c;利用光纤实现光的干涉&#xff0c;由于光纤取代透镜系统构成的光路具有柔软、形状可随意变化、传输距离远等特点&#xff0c;当前…

04--SpringBoot热部署与日志

1、热部署 1.1 引言 为了进一步提高开发效率&#xff0c;SpringBoot为我们提供了全部项目热部署&#xff0c;日后在开发过程中修改了部分代码或者相关配置文件之后&#xff0c;不需要再重启服务使其生效。在项目中开启了全局热部署之后&#xff0c;只需要在修改之后等待几秒钟…

数据库(9)——DQL基础查询

数据查询 数据查询是SQL中最复杂的&#xff0c;语法结构为 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后字段列表 ORDER BY 排序字段列表 LIMIT 分页参数 查询多个字段 SELECT 字段1&#xff0c;字段2...FROM…

sysbench安装(在线离线)

简介 sysbench是一个多线程基准测试工具&#xff0c;它支持硬件&#xff08;CPU、内存、I/O&#xff09;、数据库基准压测等2种测试手段&#xff0c;用于评估系统的基本性能。本篇文章主要介绍sysbench在线和离线2种安装方法&#xff0c;并将离线编译时发生的异常记录到FAQ&…

LES物流执行系统,在离散制造行业有那些作用和价值?

离散制造企业往往面临的是多品种、小批量的非标订单生产&#xff0c;传统推动式物流系统已经无法应对计划变化滞后&#xff0c;各车间、工序之间难以衔接等情况&#xff0c;特别是密集劳动力的电子行业&#xff0c;非标产品 SKU 种类繁多&#xff0c;物料配送复杂&#xff0c;对…

基于C++11实现的手写线程池

在实际的项目中&#xff0c;使用线程池是非常广泛的&#xff0c;所以最近学习了线程池的开发&#xff0c;在此做一个总结。 源码&#xff1a;https://github.com/Cheeron955/Handwriting-threadpool-based-on-C-17 项目介绍 项目分为两个部分&#xff0c;在初版的时候&#x…

基于springboot+vue的社区医院管理服务系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Numba 的 CUDA 示例(1/4):踏上并行之旅

按照本系列从头开始使用 Python 学习 CUDA 编程 介绍 GPU&#xff08;图形处理单元&#xff09;&#xff0c;顾名思义&#xff0c;最初是为计算机图形学开发的。从那时起&#xff0c;它们几乎在每个需要高计算吞吐量的领域都无处不在。这一进步得益于 GPGPU&#xff08;通用 G…

AI大模型如何“开窍”?算法、数据与架构的三重奏

一、算法创新 1. 探索新的学习范式 自监督学习&#xff1a;利用未标注数据让模型自我学习&#xff0c;提高模型的泛化能力。元学习&#xff1a;让模型学会如何学习&#xff0c;以便在不同任务之间快速迁移。强化学习&#xff1a;通过试错与奖励机制&#xff0c;使模型在与环境…

[数据集][目标检测]红外车辆检测数据集VOC+YOLO格式13979张类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;13979 标注数量(xml文件个数)&#xff1a;13979 标注数量(txt文件个数)&#xff1a;13979 标…

介绍Django Ninja框架

文章目录 安装快速开始特性详解自动文档生成定义请求和响应模型异步支持中间件支持测试客户端 结论 Django Ninja是一个基于Python的快速API开发框架&#xff0c;它结合了Django和FastAPI的优点&#xff0c;提供了简单易用的方式来构建高性能的Web API。 安装 使用以下命令安…

[FlareOn6]Overlong

很简单的逻辑 一度让我以为是加保护了 运行告诉我从未编码,懵逼 动调你也发现,你根本没什么可以操作的空间,密文什么的,都是固定的 但是这里大家发现没 我们只加密了28个密文 然后text是128 也就是 0x80 是不是因为密文没加密完呢 我也懒得去写代码了 汇编直接修改push 字…

没有可用软件包 docker-ce。 错误:无须任何处理

特么的各种百度查看&#xff0c;全是一些废话&#xff01;&#xff01;&#xff01;centos7安装不上docker&#xff0c;都是老的代码了&#xff1a; yum install docker-ce 解决方案&#xff1a; # CentOS yum install docker-io