Java 11中的新字符串APIs详解

第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.mzph.cn/news/603610.shtml

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

相关文章

并发(8)

目录 46.Thread.sleep(),Object.wait(),Condition.await(),LockSupport.part()的区别? 47.如果在wait()之前执行了notify()会怎样? 48.如果在park()之前执行了unpark()会怎样? 49.什么是AQS&…

九州金榜|孩子厌学,作为父母有想做自己的原因吗?

孩子不会天生就厌学,如果孩子天生厌学,那么孩子就不可能学会说话,走路,日常生活,更不可能去上学,孩子厌学因素非常多,而作为父母,你有没有想过是你的原因造成的呢?九州金…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来,通用代码生成器和超级语言 我们生活在一个编程语言种类繁多,百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话,大家都知道,大多数编程语言是高级语言。 何为高级…

K8S---通过curl访问api

1、列出所有的接口 curl --cacert /opt/kubernetes/ssl/ca.pem --cert /opt/kubernetes/ssl/default-admin.pem --key /opt/kubernetes/ssl/default-admin-key.pem https://10.240.184.74:6443/ 2、列出核心api的版本 curl --cacert /opt/kubernetes/ssl/ca.pem -…

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句,然后进行条件语句的拼接,动态标签实现了trim和if标签,所以Sql节点就要加上TrimSqlNode和ifSqlNode,我们最终要获取Sql源,动态Sql语句需要一些处理,所以…

SpringCloud系列篇:核心组件之声明式HTTP客户端组件【远程消费】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. 远程消费组件是什么 二. 远程消…

竞赛练一练 第22期:NOC大赛每日一练,python题目刷题第7天,包含答案解析

题目来自:NOC大赛创客智慧编程赛项Python 复赛模拟题(一) 第一题: 编写一个彩票游戏:随机生成一个不重复的五位数作为彩票号,游戏提示用户输入一个五位整数,然后根据下面的规则判断用户是否能赢得奖金,最后要求输出彩票号和奖金。 (1)若用户输入的数字和彩票的数字完…

c语言考试代码

文章目录 文件操作题 “%”:格式化字符串的起始标志。 “0”:表示使用零来填充输出字段的宽度。 “4”:表示输出字段的宽度为4个字符,如果输出的十六进制数不足4位,则在左边用零进行填充。 “x”:表示以十六…

MySql海量数据存储与优化

一、Mysql架构原理和存储机制 1.体系结构 2.查询缓存 3.存储引擎 存储引擎的分类 innodb:支持事务,具有支持回滚,提交,崩溃恢复等功能,事务安全myisam:不支持事务和外键,查询速度高Memory:利…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

CHS_02.1.1.2+操作系统的特征

CHS_02.1.1.2操作系统的特征 操作系统的四个特征并发这个特征为什么并发性对于操作系统来说是一个很重要的基本特性资源共享虚拟异步性 各位同学 大家好 在这个小节当中 我们会学习 操作系统的四个特征 操作系统有并发 共享 虚拟和异部这四个基本的特征 其中 并发和共享是两个…

机器人的末端执行器由什么零件组成,有什么作用。

问题描述:机器人的末端执行器由什么零件组成,有什么作用。 问题解答: 机器人的末端执行器是机器人机械结构的最末端部分,用于执行具体的任务和与环境进行交互。末端执行器通常由多个零部件组成,其主要作用是完成机器…

log4j RCE漏洞原理分析及检测

实现原理 log4j支持使用表达式的形式打印日志,比如 logger.info("system propety: ${sys:user.dir}");问题就在与表达式支持非常多样,其中有一个jndi就是今天的主题 logger.info("system propety: ${jndi:schema://url}");jdk将从…

学习笔记——C++ do while语句

作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;do{循环语句}while{循环条件}&#xff1b; 注意&#xff1a;与while的区别在于do while 会先执行一次循环语句&#xff0c;再判断循环条件。 示例&#xff1a;打印0-9的数字 #include<bits/stdc.h…

图神经网络|9.3 邻接矩阵的变换

由于邻接矩阵中一般不会&#xff08;i,i&#xff09;等于1&#xff0c;除非第i个点上有自环。 而如果用邻接矩阵去乘上特征矩阵&#xff0c;那么将丢失自身向自身的贡献。 此时可以再邻接矩阵的基础上&#xff0c;再加上一个单位阵&#xff0c;从而使得最终的结果包含自身对整体…

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…

JavaWeb——新闻管理系统(Jsp+Servlet)之jsp新闻新增

java-ee项目结构设计 1.dao:对数据库的访问&#xff0c;实现了增删改查 2.entity:定义了新闻、评论、用户三个实体&#xff0c;并设置对应实体的属性 3.filter&#xff1a;过滤器&#xff0c;设置字符编码都为utf8&#xff0c;防止乱码出现 4.service:业务逻辑处理 5.servlet:处…

一文讲透使用SPSS统计分析软件绘制双轴线图

双轴线图主要用来展示两个因变量和一个自变量的关系&#xff0c;并且两个因变量的数值单位不同时的情形。具体来说&#xff0c;双轴线图是指在一幅图上有一个横轴和两个纵轴&#xff0c;适用于三个变量。两个纵轴分别表示一个变量&#xff0c;横轴变量同时适用于两个纵轴上的变…

【InternLM】Lagent智能体工具调用实践浦语·灵笔(InternLM-XComposer)图文理解创作Demo练习

目录 前言一、Lagent智能体工具1-1、什么是智能体&#xff1f;1-2、Lagent智能体 二、InternLM-XComposer&#xff08;图文理解创作模型介绍&#xff09;三、Lagent调用实践3-0、环境搭建3-1、创建虚拟环境3-2、导入所需要的包3-3、模型下载3-4、Lagent安装3-5、demo运行 四、I…

【Navigation】global_planner 源码解析

全局规划器 global_planner 功能包 文章目录 global_planner 功能包结构1、plan_node.cpp2、planner_core.cpp3、astar.cpp4、dijkstra.cpp5、quadratic_calculator.cpp6、grid_path.cpp7、gradient_path.cpp8、orientation_filter.cpp全局规划大都基于静态地图进行规划,产生路…