jdk8 字符串_在JDK 8中连接字符串

jdk8 字符串

JDK 8引入了语言功能,例如lambda表达式 , 流 ,甚至是新的Date / Time API ,这些都会改变我们编写Java应用程序的方式。 但是,还有一些新的API和功能可能不太“改变游戏规则”,但仍为Java编程语言带来了更大的便利性和表现力。 在本文中,我将介绍这些较小的功能之一,并研究在JDK 8中轻松连接多个String的能力。

在JDK 8中连接多个String的最简单方法也许是通过遍历Java类String的两个新的静态方法: join(CharSequence,CharSequence…)和join(CharSequence,Iterable) 。 接下来的两个代码清单演示了应用这两个String.join方法有多么容易。

使用String.join(CharSequence,CharSequence ...)

/*** Words associated with the blog at http://marxsoftware.blogspot.com/ in array.*/
private final static String[] blogWords = {"Inspired", "by", "Actual", "Events"};/*** Demonstrate joining multiple Strings using static String* "join" method that accepts a "delimiter" and a variable* number of Strings (or an array of Strings).*/
private static void demonstrateStringJoiningArray()
{final String blogTitle = String.join(" ", blogWords);out.println("Blog Title: " + blogTitle);final String postTitle = String.join(" ", "Joining", "Strings", "in", "JDK", "8");out.println("Post Title: " + postTitle);
}

使用String.join(CharSequence,Iterable)

/*** Pieces of a Media Access Control (MAC) address.*/
private final static List<String> macPieces;static
{macPieces = new ArrayList<>();macPieces.add("01");macPieces.add("23");macPieces.add("45");macPieces.add("67");macPieces.add("89");macPieces.add("ab");
};/*** Demonstrate joining multiple Strings using static String* "join" method that accepts a "delimiter" and an Iterable* on Strings.*/
private static void demonstrateStringJoiningIterable()
{final String macAddress = String.join(":", macPieces);out.println("MAC Address: " + macAddress);
}

运行上面两个代码清单的输出是:

Blog Title: Inspired by Actual Events
Post Title: Joining Strings in JDK 8
MAC Address: 01:23:45:67:89:ab

使用两个静态String.join方法是组合字符串的简便方法,但是JDK 8引入的StringJoiner类提供了更大的功能和灵活性。 下一个代码清单演示了如何实例化StringJoiner并将其传递给指定的定界符(小数点),前缀(打开括号)和后缀(关闭括号)。

简单的字符串连接器使用

/*** Demonstrate joining multiple Strings using StringJoiner* with specified prefix, suffix, and delimiter.*/
private static void demonstrateBasicStringJoiner()
{// StringJoiner instance with decimal point for delimiter, opening// parenthesis for prefix, and closing parenthesis for suffix.final StringJoiner joiner = new StringJoiner(".", "(", ")");joiner.add("216");joiner.add("58");joiner.add("216");joiner.add("206");final String ipAddress = joiner.toString();out.println("IP Address: " + ipAddress);
}

运行上面的代码将以下字符串打印到标准输出:“ IP地址:(216.58.216.206)”

StringJoiner是一种特别有吸引力的方法,在这种情况下,正在使用StringBuilder将定界字符添加到要作为某种迭代类型的一部分而构建的String中。 在这种情况下,通常有必要在最后一次迭代中删除添加到该构建器末尾的额外字符。 StringJoiner足够“聪明”,只在要连接的字符串之间添加定界符,而不是在最后一个字符串后添加定界符。 连续调用add(CharSequence)方法看起来与StringBuilder / StringBuffer API非常相似。

我将在本文中介绍的最后一个JDK 8引入的用于连接String的方法是将流支持的集合与连接 收集器一起使用 ( 归约操作 )。 在下一个代码清单中对此进行了演示,其输出与用于通过String.join打印MAC地址的String.join方法相同,该方法接受Iterable作为其第二个参数。

字符串与收藏集的流连接

/*** Demonstrate joining Strings in a collection via that collection's* Stream and use of the Joining Collector.*/
private static void demonstrateStringJoiningWithCollectionStream()
{final String macAddress =macPieces.stream().map(piece -> piece.toString()).collect(Collectors.joining(":"));out.println("MAC Address: " + macAddress);
}

如果开发人员希望能够为连接的字符串提供前缀和后缀,而不必连续调用add使用StringJoiner连接String所需的方法,则Collectors.joining(CharSequence,CharSequence,CharSequence)方法是完美的选择。 下一个代码示例显示了上面的IP地址示例,用于演示StringJoiner ,但这一次是使用集合,流和StringJoiner收集器实现的。 输出与前面的示例相同,无需为每个要连接的String指定add(CharSequence)

字符串与Collection的流,前缀和后缀联接

/*** Demonstrate joining Strings in a collection via that collection's* Stream and use of a Joining Collector that with specified prefix * and suffix.*/
private static void demonstrateStringJoiningWithPrefixSuffixCollectionStream()
{final List<String> stringsToJoin = Arrays.asList("216", "58", "216", "206");final String ipAddress =stringsToJoin.stream().map(piece -> piece.toString()).collect(Collectors.joining(".", "(", ")"));out.println("IP Address: " + ipAddress);
}

这篇博客文章介绍了JDK 8中提供的三种连接字符串的方法:

  1. 静态String.join方法
  2. StringJoiner实例
  3. 加入收集器的收集流

翻译自: https://www.javacodegeeks.com/2015/02/joining-strings-in-jdk-8.html

jdk8 字符串

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

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

相关文章

C语言中要改变循环语句的流程可以使用的语句有哪些

C语言中要改变循环语句的流程可以使用的语句有&#xff1a;break&#xff0c;continue和goto。break语句可以终止循环而执行整个循环语句后面的代码&#xff1b;continue语句可以跳过循环体中剩余的语句而强制进入下一次循环。break关键字当 break 关键字用于 while、for 循环时…

apk图标存放位置_安卓系统下安装完apk程序后,具体的文件夹位置在哪里呢?

展开全部 有的程序的文件夹是自动建立在sd卡上的,有的程序是没有文件夹的,程序位于32313133353236313431303231363533e59b9ee7ad9431333365666238date/app文件夹内,而系统的程序位于system/app文件夹内。 软件安装完成后,就会在date/app目录出现一个apk文件。 这个文件相当…

java 线程什么时候出栈_在Java中给出的时间

java 线程什么时候出栈tl; dr&#xff0c;您可以使用标签来阐明给定的测试时间样式。 什么时候给出&#xff1f; 给定的时间&#xff0c;然后是指定系统行为的一种常用样式&#xff0c;其中您的测试分为三个部分。 给定的部分列出了测试的先决条件&#xff0c;即在您开始之前…

java 2_Java(二)

二维数组是由一维数组组成的数组选择排序原理将数组中每一个元素与第一个元素相比较&#xff0c;如果这个元素小于第一个元素&#xff0c;则交换这两个元素循环第一条规则&#xff0c;找出最小元素&#xff0c;放于第一个位置经过n-1轮比较完成排序冒泡排序原理逐一比较数组中相…

continue语句只用于循环语句中,它的作用是什么?

continue语句只用于循环语句中&#xff0c;它的作用是&#xff1a;跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在while、for循环中&#xff0c;常与if条件语句一起使用&#xff0c;判断条件是否成立。continue语句只用在while、for循环中&#xff0c;它的作…

成为java高手_我如何想成为Java

成为java高手我喜欢Java。 我喜欢用Java编程。 但是在使用Python一段时间后&#xff0c;我希望对其进行一些更改。 它几乎纯粹是语法上的&#xff0c;因此可能有更好的JVM语言&#xff0c;但是我并不真正感兴趣&#xff0c;因为我仍然需要使用普通的Java来工作。 我意识到这些更…

在c语言中引用数组元素时,其数组下标的数据类型允许是什么

在c语言中引用数组元素时&#xff0c;其数组下标的数据类型允许是&#xff1a;整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组&#xff0c;数据元素的表示形式为“数组名[下标]”&#xff0c;下标可以是整型常量或整型表达式。数组中只有一维数组…

在c语言中char型数据在内存中的储存形式为什么

在c语言中char型数据在内存中的储存形式为“ASCII码”。在C语言中&#xff0c;将一个字符常量放到一个字符变量中&#xff0c;实际并不是把该字符本身放到内存单元中&#xff0c;而是将与该字符相对应的ASCII码放到存储单元中。c语言 char型字符型数据类型就是字符1、字符数据的…

集合相减算法java_集算器协助java处理结构化文本的集合运算

有两个小文件&#xff1a;f1.txt和f2.txt&#xff0c;第一行是列名&#xff0c;现在需要对文件中的Name字段进行交集运算。部分数据如下&#xff1a;文件f1.txt:文件f2.txt:集算器代码&#xff1a;A1、B1&#xff1a;用import函数将文件读[A1.(Name),B1.(Name)].isect()入内存&…

netbeans插件_如何编写NetBeans插件

netbeans插件是否想在NetBeans IDE中添加功能或自动执行某些操作&#xff1f; 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 &#xff0c;创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句&…

c语言程序从哪里开始执行

c语言程序的执行总是起始于main函数。在一个C语言源程序中&#xff0c;无论main函数书写在程序的前部&#xff0c;还是后部&#xff0c;程序的执行总是从main函数开始&#xff0c;并且在main函数中结束。但需要注意的是&#xff0c;也是有特殊情况的&#xff0c;若是代码中出现…

基于价值链的流程框架分类_基于价值的类

基于价值链的流程框架分类在Java 8中&#xff0c;某些类在Javadoc中有一个小注释&#xff0c;说明它们是基于值的类 。 其中包括简短说明的链接&#xff0c;以及有关不使用它们的限制。 这很容易被忽略&#xff0c;如果这样做&#xff0c;则可能会在将来的Java版本中以微妙的方…

java json 易用_Java中 Json的使用

Java JSON本章节我们将为大家介绍如何在 Java 语言中使用 JSON。类库选择Java中并没有内置JSON的解析&#xff0c;因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库。Gson:谷歌开发的 JSON 库&#xff0c;功能十分全面。FastJson:阿里巴巴开发的 JSON 库&#…

C语言中数组所占字节怎么算

数组在内存中所占字节数可以使用sizeof操作符来计算&#xff0c;该操作符是专门用于检测类型或变量或数组在内存中所占有的空间&#xff08;字节数&#xff09;&#xff1b;语法“sizeof(x)”&#xff0c;其中x是类型名、变量名或数组名等&#xff0c;可以返回x所占字节数。C语…

java伪装反序列化字节流_java对象序列化流和反序列化流

首先创建一个学生类import java.io.Serializable;public class Student implements Serializable {private static final long serialVersionUID 42L;private String name;//private int age;private transient int age;public Student() {}public Student(String name, int a…

sap界面功能_功能介面

sap界面功能目录 1.简介 2.理由 3. Lambda表达式 4.谓词<T> 5. BiPredicate <T&#xff0c;U> 6.函数<T&#xff0c;R> 7. BiFunction <T&#xff0c;U&#xff0c;R> 8.消费者<T> 9. BiConsumer <T&#xff0c;U> 10.供应商<T> 11.…

c 中头文件和源文件的区别是什么

区别&#xff1a;头文件是“.h”文件&#xff0c;提供接口&#xff1b;源文件是“.cpp”文件&#xff0c;提供实现。编译器规定源文件必须包含函数入口&#xff0c;即main函数&#xff1b;而头文件不得包含函数入口&#xff0c;头文件不可以单独编译成一个程序&#xff0c;仅仅…

rest api_REST API的演变

rest api每个开发人员都以某种方式接触到API 。 要么为一家大公司集成一个主要系统&#xff0c;或者使用最新的图形库生成一些精美的图表&#xff0c;要么直接与他喜欢的编程语言进行交互。 事实是&#xff0c;API无处不在&#xff01; 它们实际上代表了当今Internet的基本构建…

在c程序中,注释语句只能位于一条语句的后面吗

C语言中的注释在编写C语言源代码时&#xff0c;应该多使用注释&#xff0c;这样有助于对代码的理解。在C语言中有两种注释方式&#xff1a;一种是以/*开始、以*/结束的块注释&#xff08;block comment&#xff09;&#xff1b;另一种是以//开始、以换行符结束的单行注释&#…

java中的wn是什么意思_wnJava--做简捷的互动社区网站

13年3月份开始策划开发的个人作品&#xff0c;一直都是一个人开发&#xff0c;虽然自觉还有许多功能需要完善&#xff0c;冒着被各位大牛们批判的风险共享下源码&#xff0c;在看了网站之后感兴趣的可以自行下载啊。代码运行于tomcat容器&#xff0c;jsp-servlet架构 使用sprin…