Java 11中的新字符串APIs详解

news2024/9/29 1:24:00

第1章 引言

大家好,我是小黑,咱们都知道,Java作为一种广泛使用的编程语言,每一次更新都会带来不少新鲜事物。而Java 11,作为长期支持(LTS)版本之一,更是引起了广大开发者的关注。好,那今天小黑就要来聊聊Java 11里的一些新特性,特别是关于字符串处理的那部分。

想想看,无论是在做网页开发、应用程序,还是处理数据时,字符串都是我们经常打交道的类型。我们需要检查它们是否有效,将它们拼接、分割,或者进行各种转换。所以,Java 11在这方面的优化,可以说是非常及时和实用的。

第2章 Java 11字符串API的新变化

1. isBlank():检查字符串是否为空白

这个方法用来判断字符串是否为空白。和我们熟知的isEmpty()不同,isBlank()判断的是字符串是否只包含空白字符。举个例子:

String str1 = "  ";
String str2 = "";

// 检查字符串是否只包含空白字符
System.out.println(str1.isBlank()); // 输出:true
// 检查字符串是否为空
System.out.println(str2.isEmpty()); // 输出:true

可以看到,isBlank()在处理只有空格的字符串时特别有用。

2. lines():将字符串分割成流(Stream)

lines()这个方法可以将一个包含多行内容的字符串,方便地分割成一个流(Stream)。对于处理多行文本来说,这个方法简直是救星。比如:

String multilineString = "Hello\nWorld\nJava 11";
multilineString.lines().forEach(System.out::println);

这段代码会把每一行内容依次打印出来。

3. strip(), stripLeading(), stripTrailing():去除空白

Java 11中增加了三个去除空白的方法:strip()stripLeading()stripTrailing()。这些方法比传统的trim()更智能,它们能识别并去除Unicode空白字符。来看下面的例子:

String str = "  Hello Java 11  \u2005";
System.out.println(str.strip()); // 去除两端空白
System.out.println(str.stripLeading()); // 只去除左边空白
System.out.println(str.stripTrailing()); // 只去除右边空白
4. repeat(int):重复字符串

这个方法也很直观,就是将字符串重复指定的次数。比如,小黑想要把某个字符串重复5次,只需要这样做:

String str = "Java";
System.out.println(str.repeat(5)); // 输出:JavaJavaJavaJavaJava

看到这里,咱们应该已经感受到了Java 11在字符串处理方面的强大和便捷。这些新特性不仅提高了代码的可读性,而且在很多情况下,也使得代码变得更简洁高效。

第3章 新增APIs深入解析

isBlank():检查字符串是否为空白

在Java 11之前,咱们通常使用isEmpty()来检查一个字符串是否为空。但是,isEmpty()只能检查字符串长度是否为零,对于只包含空白字符的字符串,它就束手无策了。这时候,isBlank()就派上用场了。这个方法能判断一个字符串是否只包含空白字符(比如空格、制表符或者换行符)。

String space = "   ";
String tab = "\t";
String newline = "\n";
String empty = "";
String text = "Java";

System.out.println(space.isBlank()); // true
System.out.println(tab.isBlank()); // true
System.out.println(newline.isBlank()); // true
System.out.println(empty.isBlank()); // true
System.out.println(text.isBlank()); // false

在这个例子中,只有包含实际文本的字符串text返回了false,其余全都是true。这个方法在处理用户输入或者文本解析时特别有用,可以帮助咱们过滤掉无效的空白字符串。

lines():将字符串分割成流(Stream)

在处理多行文本时,lines()这个方法就显得非常强大了。它可以将一个包含多行文本的字符串,方便地分割成一个流(Stream),每一行都成为流的一个元素。这在处理日志文件或者用户输入的段落文本时非常方便。

String multilineString = "第一行\n第二行\n第三行";
multilineString.lines().forEach(System.out::println);

这段代码会逐行打印出字符串中的内容。在Java 11之前,咱们可能需要用到比较复杂的正则表达式或者循环来实现同样的功能。现在,一切都变得简单多了。

strip(), stripLeading(), stripTrailing():去除空白

Java 11引入了这三个方法来处理字符串中的空白字符。strip()方法去除字符串两端的空白,而stripLeading()stripTrailing()分别只去除左边或右边的空白。这些方法都能智能地识别各种空白字符,包括那些在旧版Java中trim()方法无法处理的。

String example = "  \u2005Hello Java 11\u2005  ";
System.out.println("'" + example.strip() + "'"); // 去除两端的空白
System.out.println("'" + example.stripLeading() + "'"); // 只去除左边的空白
System.out.println("'" + example.stripTrailing() + "'"); // 只去除右边的空白

在这个例子中,\u2005代表一个特殊的空白字符,strip()系列方法能够有效地处理它。

repeat(int):重复字符串

最后来看看repeat()方法。这个方法非常直接——它会将字符串重复指定次数。这在生成重复的模式或者进行简单的文本构造时非常有用。

String name = "小黑";
System.out.println(name.repeat(3)); // 输出:小黑小黑小黑

这个方法的优雅之处在于,它可以用一行代码替代以前需要循环和字符串拼接才能完成的工作。

第4章 实际应用案例

例子1:用户输入验证

假设咱们正在开发一个应用程序,需要验证用户输入的字符串是否有效。在Java 11之前,这个任务可能需要结合使用isEmpty()和一些额外的逻辑来完成。但现在,isBlank()方法使得这个过程变得简单多了。

public static boolean isValidInput(String input) {
    return input != null && !input.isBlank();
}

// 测试示例
System.out.println(isValidInput("")); // false
System.out.println(isValidInput("   ")); // false
System.out.println(isValidInput("Java 11")); // true

在这个例子中,isValidInput方法会检查输入的字符串不是null,并且不是空白的。这样就能有效地过滤掉无效的用户输入。

例子2:日志文件的行处理

想象一下,咱们需要处理一个日志文件,每一行都是一个记录。在Java 11中,lines()方法可以轻松地帮助咱们把这个任务做得简洁而高效。

public static void processLogFile(String logContent) {
    logContent.lines()
              .filter(line -> !line.isBlank())
              .forEach(System.out::println);
}

// 测试示例
String logFileContent = "第一行日志\n\n第二行日志\n  \n第三行日志";
processLogFile(logFileContent);

在这个示例中,processLogFile方法使用lines()来逐行处理日志内容,同时过滤掉空白行。

例子3:格式化文本输出

假设咱们需要在控制台上输出一些格式化的文本,比如标题下的分隔线。使用Java 11的repeat()方法,这个任务就变得非常简单。

public static void printSectionTitle(String title) {
    System.out.println(title);
    System.out.println("=".repeat(title.length()));
}

// 测试示例
printSectionTitle("Java 11新特性");

这个printSectionTitle方法不仅打印标题,还打印与标题长度相同的分隔线,非常适合于格式化输出。

第5章 性能考虑

isBlank()isEmpty() 的比较

咱们来看看isBlank()和老朋友isEmpty()。实际上,在大多数情况下,isBlank()的性能表现和isEmpty()相差无几。为什么呢?因为isBlank()只是多做了一些额外的空白字符检查。但这点额外工作对于现代的JVM来说,几乎可以忽略不计。

lines() 的效率

接下来说说lines()。这个方法返回一个Stream,这意味着它支持懒加载。换句话说,只有在真正需要处理某一行时,这一行才会被处理。这种方式在处理大文本文件时特别有效,因为它可以大幅减少内存占用,并提升处理速度。

strip() 系列方法的性能

再来看strip(), stripLeading(), stripTrailing()。这些方法比传统的trim()更智能,因为它们可以处理Unicode空白字符。在性能上,虽然它们做的事情比trim()多,但这些额外的操作通常不会对性能产生显著影响。事实上,对于大多数应用场景来说,这些方法的性能足够好。

repeat(int) 的性能考虑

最后说说repeat()。这个方法在内部实现时会考虑到字符串的重复构造,避免了不必要的字符串拷贝。这意味着,即使是重复多次,它也能保持良好的性能。但当然,如果重复次数非常大,那么内存消耗和处理时间自然也会增加。

String word = "Java";
// 重复1000次
String repeated = word.repeat(1000);
// 这样做的性能通常比手动循环拼接字符串要好

在实际使用这些方法时,咱们应该考虑到它们的性能特性。大部分情况下,这些新特性不仅提升了代码的可读性和可维护性,而且还保持了良好的性能。但是,如果你正在处理非常大的数据集,或者在性能敏感的应用中,那么进行一些额外的性能测试是非常有必要的。

第6章 结论

isBlank()。这个小巧的方法对于检查字符串是否只包含空白字符真的非常方便。它让代码变得更清晰,也减少了咱们写额外逻辑的需要。无论是处理用户输入还是数据清洗,isBlank()都是一个很实用的工具。

lines()。这个方法为处理多行字符串提供了极大的便利,特别是当你需要逐行分析或者操作字符串时。它返回的流(Stream)可以让你轻松地应用各种流操作,使得代码更加简洁和表达力更强。

strip()stripLeading()stripTrailing()的引入,解决了trim()在处理Unicode空白字符时的局限。这不仅让字符串处理变得更加全面,也让我们的程序更加国际化,适应不同语言和文化的需求。

repeat()方法简化了重复字符串的生成过程。无论是生成测试数据还是创建用户界面,这个方法都能让我们的代码更加简洁。

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

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

相关文章

数据结构期末复习

章节知识点分析 第一章绪论 基本概念 数据 数据元素(记录、表目,是数据集合中一个个体) 数据项:一个数据元素可由若干数据项组成 数据对象:性质相同的数据元素的集合,是数据的一个子集 数据结构&…

超维空间M1无人机使用说明书——51、ROS无人机使用AR二维码识别与定位

引言:二维码识别与定位是指ROS通过创建AR标签并且对AR标签进行识别,标签可以由自己任意创建,具体方法会在文中给出,摄像头可以通过识别AR标签大小和姿态获取到标签对应的ID和位置等信息,实现识别与定位 注意&#xff…

深入分析-Spring BeanDefinition构造元信息

**## Spring BeanDefinition元信息定义方式 Bean Definition是一个包含Bean元数据的对象。它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系。可以使用多种方式来定义 Bean Definition 元信息&#xff0c;包括&#xff1a; XML 配置文件&#xff1a;使用<be…

Qt/QML编程学习之心得:Linux下读写文件File(24)

在Linux嵌入式系统中,经常会使用Qt来读写一个文件,判断一个文件是否存在,具体如何实现呢? 首先,要使用linux系统中相关的头文件: #include <unistd.h> #include <stdio.h> #include <stdlib.h> 其次,判断路径是否存在, if(!dir.exists()){mkdir(…

C#,字符串匹配算法(模式搜索)Z算法的源代码与数据可视化

Z算法也是模式搜索&#xff08;Pattern Search Algorithm&#xff09;的常用算法。 本文代码的运算效果&#xff1a; 一、Z 算法 线性时间模式搜索算法的Z算法&#xff0c;在线性时间内查找文本中模式的所有出现。 假设文本长度为 n&#xff0c;模式长度为 m&#xff0c;那么…

SSR 服务器端渲染:提升用户体验的新趋势(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

关于目标检测中按照比例将数据集随机划分成训练集和测试集

1. 前言 在做目标检测任务的时候&#xff0c;不少网上的数据&#xff0c;没有划分数据集&#xff0c;只是将数据和标签放在不同的文件夹下&#xff0c;没有划分数据集 虽然代码简单&#xff0c;每次重新编写还是颇为麻烦&#xff0c;这里记录一下 如下&#xff0c;有的数据集…

three.js给模型添加标签三种方式对比(矩形平面,精灵图,CSS2DObject)

three.js给模型添加标签三种方式对比&#xff08;矩形平面&#xff0c;精灵图&#xff0c;CSS2DObject&#xff09; vue3实现&#xff0c;代码如下 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"&g…

Android studio 无法创建AIDL文件

Android studio 创建AIDL文件的时候 提示是灰色的无法创建 处理方法在app下面的build.gradle中的buildFeatures 添加 aidl true 这个是 kotlin的写法&#xff0c;如果是使用的旧项目修改下格式就行

The Planets: Mercury

靶场环境 整个靶场的环境&#xff0c;我出现了一点点问题&#xff0c;一直找不到主机的IP地址&#xff0c;后来参考了https://www.cnblogs.com/hyphon/p/16354436.html&#xff0c;进行了相关的配置&#xff0c;最后完成靶机环境的搭建&#xff01; 信息收集 # nmap -sn 192…

第二百四十三回 再分享一个Json工具

文章目录 1. 概念介绍2. 分析与比较2.1 分析问题2.2 比较差异 3. 使用方法4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"相关的内容&#xff0c;本章回中将再 分享一个Json插件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版

Guitar Pro 8 Mac是一款吉他编曲学习软件&#xff0c;用于吉他、贝和其他弦乐器的制谱和演奏&#xff0c;这是一个多轨编辑器&#xff0c;具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱&#xff0c;并…

qt三大控件

1.QListWidget控件 先在ui界面将 QListWidget拖出来竖直对齐 再去代码中实现文本插入 两种插入方式 方法1 //listWidget使用 有左右中间对齐需求QListWidgetItem * itemnew QListWidgetItem("床前明月光"); // //上面只是独立的一句话,没有关联起来ui-&g…

如何建立标准且有效的评审流程?6个重点

为了进一步提高项目质量&#xff0c;项目评审管理需要遵循一定的标准化流程。而建立标准且有效的评审流程&#xff0c;能够快速提高项目质量和效率&#xff0c;优化团队协作&#xff0c;降低风险&#xff0c;提高项目成功率。如果组织没有建立起标准化的评审流程&#xff0c;就…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C\笔记之cout高亮输出以及纯C\实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C\实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技…

常用Python自动化测试框架有哪些?

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了测试时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

蓝桥杯练习题(一)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;一&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript

ts axios 指定返回值类型&#xff0c;返回数据类型不确定该怎么办 typescript 转到 ts 以来&#xff0c;一直有个问题困扰着我&#xff0c;就是每次用 axios 获取数据时&#xff0c;返回值 res 的类型都不能确定&#xff0c;这就导致编辑器一直提示我&#xff1a; 原因 原因是…

哪些软件可以把扫描的表格转成EXCEL

也可点击“软件下载” 一、点击“软件下载”下载安装软件后使用&#xff0c;或直接用网页版添加图片再点击“提交识别”来转换。 二、软件安装成功后将待识别的图片添加进去&#xff0c;点击“识别全部”即可&#xff0c;非常简单。

基于SpringBoot大药房管理系统(程序+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;摘 要 伴随着全球信息化发展&…