Java String类(2)

news2024/12/23 15:01:04

String方法

字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串

相关方法如下:

方法功能
String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分
String[ ] split(String regex, int limit)将字符串以指定的格式,拆分为limit组

代码示例:实现字符串的拆分处理

 public static void main(String[] args) {
        String str = "hello world hello world";

        //全部拆分
        String[] result1 = str.split(" ");
        for(String s : result1) {
            System.out.print(s);
        }
        System.out.println();

        //部分拆分
        String[] result2 = str.split(" ", 2);
        for(String s : result2) {
            System.out.print(s);
        }
    }

拆分是特别常用的操作,一定要重点掌握。另外有些特殊字符作为分割符可能无法正确切分,需要加上转义。

举个例子:比如拆分IP地址

public static void main(String[] args) {
        String str = "192.168.1.1";
        String[] result = str.split("\\.");
        for(String s : result) {
            System.out.println(s);
        }
    }

运行结果如下:

注意事项:

1.字符"|","*","+"都得加上转义字符,前面加上"\\"

2.而如果是"\\",那么就得写成"\\\\"

3.如果一个字符串中有多个分割符,可以用"|"作为连字符

举个例子吧:多次拆分

public static void main(String[] args) {
        String str = "name=zhangsan&age=18";

        //第一种多次拆分的方法
        String[] result1 = str.split("&|=");
        for(String s : result1) {
            System.out.println(s);
        }
        System.out.println("=================");
        //第二种多次拆分的方法
        String[] result2 = str.split("&");
        for(String s : result2) {
            String[] temp = s.split("=");
            System.out.println(temp[0] + "\n" + temp[1]);
        }
    }

运行结果如下:

字符串的截取

从一个完整的字符串中截取出部分内容。可用方法如下:

方法功能
String substring(int beginIndex)从指定索引截取到结尾
String substring(int beginIndex, int endIndex)截取部分内容

 举个例子:

public static void main(String[] args) {
        String str = "helloworld";
        System.out.println(str.substring(5));
        System.out.println(str.substring(0,5));
    }

运行结果如下:

注意事项:

1.索引从零开始

2.注意前闭后开区间的写法,substring(0,5)表示包含0号下标的字符,不包含5号下标 

其他操作方法

方法功能
String trim()去掉字符串的左右空格,保留中间空格
String toUpperCase()字符串转大写
String toLowerCase()字符串转小写

代码示例:观察trim方法的使用

 public static void main(String[] args) {
        String str = "  hello world ";
        System.out.println("[" + str + "]");
        System.out.println("[" + str.trim() + "]");
    }

trim方法会去掉字符串开头和结尾的空白字符(空格,换行,制表符等)

字符串的不可变性

String是一种不可变对象。字符串中的内容是不可改变。字符串不可被修改,是因为:

1.String类设计时就是不可改变的,String 类实现描述中就已经说明了:

(1)String类中的字符实际保存在内部维护的value字符数组中。

(2)String类被final修饰,表明该类不可以被继承。

(3)value被final修饰,表明value自身的值不可改变,既不能引用其他的字符数组,但是引用空间的内容可以改变

2.所有涉及到可能修改字符串的操作都是创建一个新的对象,改变的是新对象

比如replace方法:它是创建了一个新的字符数组,然后修改的是这个新的数组(对象)

了解:为什么String要设计成不可变的(不可变对象的好处是什么?)

1.方便实现字符串对象池,如果String可变,那么对象池就需要考虑写时拷贝的问题了

2.不可变对象是线程安全的

3.不可变对象更方便缓存hash code,作为key时可以更高效的保存到HashMap中

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

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

相关文章

浅谈为什么磁盘慢会导致Linux负载飙升

先说原因结论 在Linux系统上,load average这个指标基本失去了作用,因为你不知道它代表什么意思,当看到load average很高的时候,你不知道是runnable进程太多还是uninterruptible sleep进程太多,也就无法判断是CPU不够用…

bazel高效使用和调优

Bazel 为了正确性和高性能,做了很多优秀的设计,那么我们如何正确的使用这些能力,让我们的构建性能“起飞”呢, 我们将从本地研发和 CI pipeline 两种场景进行分析。 本地研发 本地研发通常采用默认的 Bazel 配置即可&#xff0c…

C# Solidworks二次开发:创建距离配合以及移动组件API详解

今天要讲的文章是关于如何创建距离配合和移动组件的API详解。 (1)创建配合API,CreateMate() 这个API的解释是根据指定的特性数据对象来创建配合,也就可以理解为输入什么样的特征对象就可以创建出什么配合,这个API的输…

YOLOv5算法改进(12)— 替换主干网络之Swin Transformer

前言:Hello大家好,我是小哥谈。Swin Transformer是一种基于Transformer的深度学习模型,它在视觉任务中表现出色。与之前的Vision Transformer(ViT)不同,Swin Transformer具有高效和精确的特性,并…

学用 CountDownLatch 与 CyclicBarrier

开篇即说结论,如果搞不清楚两者区别,那就无脑用 CountDownLatch,问题也不大(因为我也不是太懂)。 CountDownLatch 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终…

R3LIVE源码解析(7) — R3LIVE中LiDAR_front_end.cpp文件

目录 1 LiDAR_front_end.cpp简介 2 LiDAR_front_end.cpp程序解析 1 LiDAR_front_end.cpp简介 激光点云首先在LiDAR_front_end节点中提取特征点,将处理完的信息通过/laser_cloud_flat完成节点的发送出去,与FAST-LIO2相同R3LIVE也只用到了面特征作为ESI…

在windows上配置ninja环境

ninja使用并行任务来编译工程,比cmake编译快了一个数量级,是谷歌在2010年为了提高cmake的编译速度而开发一款编译工具。下面介绍在windows上配置ninja环境。 1 下载ninja ninja官网地址: https://github.com/ninja-build/ninja/releases   …

【OpenCV入门】第七部分——图像的几何变换

文章结构 缩放dsize参数实现缩放fx参数和fy参数实现缩放 翻转仿射变换平移旋转倾斜 透视cmath模块 缩放 通过resize()方法可以随意更改图像的大小比例: dst cv2.resize(src, dsize, fx, fy, interpolation)src: 原始图像dsize: 输出图像的…

Leetcode---360周赛

题目列表 2833. 距离原点最远的点 2834. 找出美丽数组的最小和 2835. 使子序列的和等于目标的最少操作次数 2836. 在传球游戏中最大化函数值 一、距离原点最远的点 这题主要是理解题意,遇到L往左走,遇到R往右走,遇到_左右都可以走&#x…

bazel外部依赖管理

前面我们主要分析了基于 Action 的增量构建,缓存和远程执行机制。现在让我们看看 Bazel 是如何管理外部依赖的。 大部分项目都没法避免引入第三方的依赖项。构建系统通常提供了下载第三方依赖的能力。为了避免重复下载,Bazel 要求在声明外部依赖的时候&…

美客多(mercadolibre)测评下单技术(养号环境搭建详解)

MercadoLibre(美客多)是拉丁美洲的一个网购平台。该公司为其客户提供电子商务交易的购买,出售,支付和收集机制。目前全球第十大电商市场——巴西是MercadoLibre的主要市场,占据近60%的平台营收,接着是阿根廷…

关于购买AirPods,现在是否为最佳时机?

我们不需要解释你为什么想要AirPods。苹果对真正的无线耳机的采用彻底改变了市场,并从那时起大量销售。你总是在记者、同事和名人的耳朵里看到它们——尤其是在我们这个远程工作和Zoom会议的时代。 真正的问题是,你应该现在就买一个,还是在几…

2024年java面试--多线程(1)

系列文章目录 2024年java面试(一)–spring篇2024年java面试(二)–spring篇2024年java面试(三)–spring篇2024年java面试(四)–spring篇 文章目录 系列文章目录线程调度线程五种状态…

spring boot项目生成容器并运行

一个安静的周末,shigen又睡懒觉了,上次说的拖延症的惩罚来了:早晚各100个健腹轮练习,早上的已经完成了。今天的文章来的有点晚,但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…

2021年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:生日相同 2.0 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 时间限制:1000 内存限制:65536 输入 第一行为整数n&#xff0c…

Linux系统中u-boot启动流程分析(详解)

大家好,我是ST小智,今天给大家分享一下,u-boot的启动流程。 今天给大家全面的分析一下u-boot启动流程。整理这篇文章花费时间较长,中间很长时间未更新,希望这篇文章对大家有所帮助。 本章主要是详细的分析一下uboot的…

框架分析(8)-React Native

框架分析(8)-React Native 专栏介绍React Native特性和优势跨平台开发:热更新原生性能组件化开发第三方库支持社区支持 限制和挑战性能问题第三方库兼容性学习曲线 总结 专栏介绍 link 主要对目前市面上常见的框架进行分析和总结&#xff0c…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system,称之为 文件系统,是 Node.js 中的 内置模块,可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作: 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

安圭拉变成AI领域的数字金矿?

这个小小的岛国今年的域名销售额可能达到其GDP的10%! 安圭拉a小小的英国岛屿领土在加勒比海地区,由于其“可再生能源”,今年可能带来高达3000万美元的收入。ai”域名,报告彭博在周四发表的一篇文章中说。在过去的一年里&#xff0…

应届生面试指南:如何在缺乏经验的情况下脱颖而出

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…