string index out of range_Java 12 骚操作, String居然还能这样玩!

3cacd3b92db188c1043768f50ddf1d07.png

坐稳了,准备起飞!

1、transform

transform:即字符串转换,来看下 transform 的实现源码:

public <R> R transform(Function<? super String, ? extends R> f) {return f.apply(this);
}

传入一个函数式接口 Function,接受一个值,返回一个值。

废话少说,直接上手就是干:

private static void testTransform() {System.out.println("======test java 12 transform======");List<String> list1 = List.of("Java", " Python", " C++ ");List<String> list2 = new ArrayList<>();list1.forEach(element ->list2.add(element.transform(String::strip).transform(String::toUpperCase).transform((e) -> "Hi," + e)));list2.forEach(System.out::println);
}

结果输出:

======test java 12 transform======
Hi,JAVA
Hi,PYTHON
Hi,C++

示例是对一个字符串连续转换了三遍,代码很简单,大家都能领会的。

2、indent

直接看示例吧:

private static void testIndent() {System.out.println("======test java 12 indent======");String result = "Javan PythonnC++".indent(3);System.out.println(result);
}

结果输出:

======test java 12 indent======JavaPythonC++

换行符 n 后前缩进 N 个空格,为 0 或负数不缩进。

以下是 indent 的核心源码:

private String indent(int n, boolean removeBlanks) {Stream<String> stream = removeBlanks ? lines(Integer.MAX_VALUE, Integer.MAX_VALUE): lines();if (n > 0) {final String spaces = " ".repeat(n);stream = stream.map(s -> spaces + s);} else if (n == Integer.MIN_VALUE) {stream = stream.map(s -> s.stripLeading());} else if (n < 0) {stream = stream.map(s -> s.substring(Math.min(-n, s.indexOfNonWhitespace())));}return stream.collect(Collectors.joining("n", "", "n"));
}

其实就是调用了 lines() 方法来创建一个 Stream,然后再往前拼接指定数量的空格。

3、describeConstable

private static void testDescribeConstable() {System.out.println("======test java 12 describeConstable======");String name = "Java技术栈";Optional<String> optional = name.describeConstable();System.out.println(optional.get());
}

结果输出:

======test java 12 describeConstable======
Java技术栈

Java 12, String 实现了 Constable 接口:

java.lang.constant.Constable

这个接口就有一个方法,源码如下:

public interface Constable {Optional<? extends ConstantDesc> describeConstable();}

Java 12 String 的实现源码:

@Override
public Optional<String> describeConstable() {return Optional.of(this);
}

很简单,其实就是调用 Optional.of 方法返回一个 Optional 类型,Optional不懂的可以参考这篇文章:Java 8 新特性之 Optional。

好了,今天的分享就到这,收藏转发一下吧,多学习了解,日后必定有用!

关注Java技术栈,分享更多主流的Java技术~

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

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

相关文章

弹性架构_实践中的弹性基础架构

弹性架构几周前&#xff0c;我获得了一个难得的机会&#xff0c;可以在基础设施领域中沾沾自喜。 在JVM内部的深入了解下&#xff0c;我每天的工作经历发生了有趣的变化&#xff0c;我想与您分享动机和成果。 希望它可以启发类似的问题类别。 背景 我将从解释需要解决方案的上…

linux的ctrl alt f6的作用,Linux(Centous6.4)操作系统中,快捷键Alt+Ctrl+F10是什么作用?...

满意答案John_05152017.07.16一些常用快捷键切换到第一个文本终端。在Linux 下你可以有多达六个不同的终端。这个命令的意思是&#xff1a;“同时按住键和键&#xff0c;然后按键&#xff0c;再释放所有的键”。(n1..6)&#xff1a;切换到第n个文本终端。(你也可以使用不是很经…

【TCP丢包重传】

TCP丢包重传机制如果在网络状况最糟糕的情况下就会造成极大的延迟。或者超过2min断开连接。如果这种场景下可以采用UDP。UDP需要解决包的重新排序&#xff0c;丢包等问题。

前端H5怎么切换语言_「自学系列一」HTML5大前端学习路线+视频教程完整版

全新Java、HTML5前端、大数据、Python爬虫、全链UI设计、软件测试、Unity 3D、Go语言等多个技术方向的全套视频。面对这么多的知识点&#xff0c;有的盆友就麻爪了……我是谁&#xff1f;我该从哪里开始看&#xff1f;我该怎么看&#xff1f;我该看多少&#xff1f;这&#xff…

r语言在linux下取数据,菜鸟第一步,跪在数据处:R语言读取数据

1. 温故知坑实践是学习知识的最好途径。之前我讲的内容都非常非常基础&#xff0c;包括&#xff1a;(1)什么是R语言&#xff1f;R语言和Rstudio软件的安装&#xff0c;Rstudio的界面介绍&#xff1b;(2)R语言的基本逻辑&#xff0c;基本数据类型&#xff1b;(3)ggplot基础绘图&…

c语言 桌面程序_C语言编程工具:Dev - C++ 简单安装和使用!新手福利!

工欲善其事&#xff0c;必先利其器。——《论语》# 写在前面有关编译器和开发工具可以查看历史文章。# 下载Dev-C操作系统建议Windows 7或10&#xff0c;直接搜索Dev-C下载&#xff0c;或者sourceforge官网下载链接&#xff1a;https://sourceforge.net/projects/orwelldevcpp/…

stub_AccuREST Stub Runner发布

stub最近发布时间不错&#xff01; 我在Too Much Coding博客上的博客更多是关于发布&#xff0c;然后是关于任何具体主题;&#xff09; 在作为Brixton RC1的一部分发布Spring Cloud Sleuth之后&#xff0c;我们刚刚发布了AccuREST 1.0.4版本。 我们修复了一些错误&#xff0c;…

kali linux wifi监听模式,无线渗透教程1:监听无线网络

第一&#xff1a;配置管理无线网卡1.1这里&#xff0c;我们使用tplink wn722n, kali linux插上即用&#xff0c;无需安装驱动。1.2Vmare虚拟机配置如下&#xff1a;如网卡插入到电脑后&#xff0c;先将虚拟机设置成桥接模式之后对虚拟机进行配置之后呢&#xff0c;我们在终端窗…

matlab的7.3版本是什么_王者荣耀:玩不好元歌的3大原因,无论什么版本,元歌起码T1.5_电竞...

很多高段位元歌并不是以秀为核心的&#xff0c;而是他们就像一个冷静的杀手&#xff0c;在一闪即逝却又最合适的时机里&#xff0c;他能正确的选择进场的方式&#xff0c;以及击杀的方式。说白了&#xff0c;元歌的进场手段并没有多少&#xff0c;什么时候用傀儡433上去锁人&am…

【WebRTC---入门篇】(一)WebRTC整体架构

1.绿色部分是WebRTC核心部分(核心库) 2.紫色部分是JS提供的API(应用层) 整体是应用层调用核心层。 核心层,第一层 C++ API 提供给外面的接口。最主要的是(PeerConnedtion 对等连接)。 核心层,第二层 Session 上下文管理层(音视频)。 核心层,第三层[最重要的…

python 创建空的numpy数组_数据分析-NumPy内置函数创建数组

微信公众号&#xff1a;yale记关注可了解更多的教程问题或建议&#xff0c;请公众号留言。背景介绍今天学习使用numpy的内置函数arange()、ones()、zeros()、linspace() 等内置函数创建数组&#xff0c;对于使用数据结构和多维列表非常有用&#xff0c;可以节省大量的时间。入门…

使用t-sql语句修改表中的某些数据及数据类型。_数据库基本理论详细介绍

1、数据库范式第一范式&#xff1a;列不可分&#xff0c;eg:【联系人】(姓名&#xff0c;性别&#xff0c;电话)&#xff0c;一个联系人有家庭电话和公司电话&#xff0c;那么这种表结构设计就没有达到 1NF&#xff1b;第二范式&#xff1a;有主键&#xff0c;保证完全依赖。eg…

【WebRTC---入门篇】(三)WebRTC运行机制

轨和流 Track 轨&#xff1a;音频轨和视频轨是不相交的 MediaStream 媒体流&#xff1a;中包含多个音视频轨 WebRTC重要类 MediaStream 负责添加N个轨&#xff0c;加入到RTCPeerConnection RTCPeerConnection 核心 RTCDataChannel 非音视频数据&#xff0c;通过RTCP…

a - 数据结构实验之串一:kmp简单应用_【在线教学示范课案例】数据结构(刘航)...

一、教师简介刘航&#xff0c;网络空间安全学院教师&#xff0c;本科生“数据结构”、“算法设计综合实验” 和研究生“算法设计与优化”课程的主讲教师。近年来积极开展了教学与考核模式改革、探究式/研究型课程等课程改革探索&#xff0c;探索课程、学科竞赛和项目相结合的科…

【WebRTC---入门篇】(四)WebRTC设备管理

enumerateDevices API用来获取音视频设备 JS使用单线程处理&#xff0c;为了避免阻塞。使用异步调用Promise。handle为处理函数&#xff0c;处理主要逻辑。成功调用resolve&#xff1b;失败调用reject。Promise可以注册两个方法 then(逻辑处理成功会收到on_resolve) 和 catch(…

【音视频安卓开发 (六)】Android GLSurfaceView播放视频

GLSurfaceView渲染RGB的数据,利用双缓冲空间机制。取出缓冲地址,将要渲染的数据copy到缓冲地址. 获取Surface Java部分&#xff1a; SurfaceView控件设置到界面中显示 SurfaceView定义一个类来实现 package com.example.hello;import android.content.Context; import android…

什么是openstack_您在OpenStack Summit 2016上错过了什么

什么是openstack今年&#xff0c;我第一次参加了4月25日至29日在德克萨斯州奥斯汀举行的OpenStack峰会。 今天结束了&#xff0c;我要回家了&#xff0c;我想回顾一下&#xff0c;从我的角度分享你错过的事情。 作为以应用程序开发人员为重点的技术传播者&#xff0c;转移到包…

python链表实现栈_使用python实现数组、链表、队列、栈

引言 什么是数据结构&#xff1f; 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表&#xff0c;集合和字典等都是数据结构 N.W…

drools6.5_Drools 6.4.0.Final提供

drools6.5最新和最出色的Drools 6.4.0.Final版本现已可供下载。 这是我们先前构建的增量版本&#xff0c;对核心引擎和Web工作台进行了一些改进。 您可以在此处找到更多详细信息&#xff0c;下载和文档&#xff1a; Drools网站 资料下载 文献资料 发行说明 请阅读下面的…