iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用Java8中的StringJoiner
  • 157
分享到

如何使用Java8中的StringJoiner

2023-06-15 13:06:02 157人浏览 泡泡鱼
摘要

这篇文章主要介绍“如何使用Java8中的StringJoiner”,在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java8中的

这篇文章主要介绍“如何使用Java8中的StringJoiner”,在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java8中的StringJoiner”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

介绍

在实用StringJoiner类之前,如果我们想要数据最终的字符串以逗号隔开,大概是这样的

StringBuilder sb = new StringBuilder();  IntStream.range(1,10).forEach(i->{      sb.append(i+"");      if( i < 10){          sb.append(",")      }   });

如果引入StringJoiner,如何处理呢?

StringJoiner sj = new StringJoiner(",");  IntStream.range(1,10).forEach(i->sj.add(i+""));

看着是不是更简单直观了呢?

另外,StringJoiner类的构造函数,还可以做到可选择性地从我们自定义的前缀开始和自定义的后缀结尾,比较灵活和实用。

//值依次是分割符 , 前缀  ,后缀  StringJoiner stringJoiner = new StringJoiner(",", "[", "]");          stringJoiner.add("xiao");          stringJoiner.add("zhi");          System.out.println(stringJoiner.toString());

输出结果:[xiao,zhi]

StringJoiner在处理sql拼接上面,也非常方便,如拼接 sql 的in条件的时候:

StringJoiner joiner3 = new StringJoiner("','", "'", "'");  joiner3.add("1").add("2");  //输出 : '1','2'

更多实用的功能,大家可以探索。

源码

这个类的源码很简单,大家很容易就可以看明白。StringJoiner 更像一个装饰者模式,对外隐藏了StringBuilder。

不过需要注意的是 StringJoiner 并且没有处理一些基本的集合元素情况,比如加入列表的元素,更像针对Collectors而设计。

package java.util;  public final class StringJoiner {      private final String prefix;//前缀      private final String delimiter;//间隔符      private final String suffix;//后缀      private StringBuilder value;//值      private String emptyValue;//空值      public StringJoiner(CharSequence delimiter) {          this(delimiter, "", "");          //默认前缀和后缀为"",重载调用      }      public StringJoiner(CharSequence delimiter,                          CharSequence prefix,                          CharSequence suffix) {          //间隔符,前缀和后缀判断是否为null,null将抛出异常          Objects.requireNonNull(prefix, "The prefix must not be null");          Objects.requireNonNull(delimiter, "The delimiter must not be null");         Objects.requireNonNull(suffix, "The suffix must not be null");           // 成员变量赋值          this.prefix = prefix.toString();          this.delimiter = delimiter.toString();          this.suffix = suffix.toString();          thisthis.emptyValue = this.prefix + this.suffix;//空值被设置为只有前后缀      }   //设置空值,检查是否为null      public StringJoiner setEmptyValue(CharSequence emptyValue) {          this.emptyValue = Objects.requireNonNull(emptyValue,              "The empty value must not be null").toString();          return this;      }      @Override      public String toString() {          if (value == null) {              return emptyValue;              //没有值将返回空值或者后续设置的空值          } else {              if (suffix.equals("")) {                  return value.toString();                  //后缀为""直接返回字符串,不用添加              } else {               //后缀不为"",添加后缀,然后直接返回字符串,修改长度                  int initialLength = value.length();                  String result = value.append(suffix).toString();                  // reset value to pre-append initialLength                  value.setLength(initialLength);                  return result;              }          }      }      //初始化,先添加前缀,有了之后每次先添加间隔符,StringBuilder后续append字符串      public StringJoiner add(CharSequence newElement) {          prepareBuilder().append(newElement);          return this;      }   //合并StringJoiner,注意后面StringJoiner 的前缀就不要了,后面的appen进来      public StringJoiner merge(StringJoiner other) {          Objects.requireNonNull(other);          if (other.value != null) {              final int length = other.value.length();              // lock the length so that we can seize the data to be appended              // before initiate copying to avoid interference, especially when              // merge 'this'              StringBuilder builder = prepareBuilder();              builder.append(other.value, other.prefix.length(), length);          }          return this;      }   //初始化,先添加前缀,添加之后每次先添加间隔符      private StringBuilder prepareBuilder() {          if (value != null) {              value.append(delimiter);          } else {              value = new StringBuilder().append(prefix);          }         return value;      }      public int length() {          // Remember that we never actually append the suffix unless we return         // the full (present) value or some sub-string or length of it, so that          // we can add on more if we need to.         //添加后缀的长度          return (value != null ? value.length() + suffix.length() :                  emptyValue.length());      }  }

到此,关于“如何使用Java8中的StringJoiner”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何使用Java8中的StringJoiner

本文链接: https://www.lsjlt.com/news/280498.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Java8中的StringJoiner
    这篇文章主要介绍“如何使用Java8中的StringJoiner”,在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java8中的...
    99+
    2023-06-15
  • Java8中StringJoiner类的使用详解
    目录Java8 StringJoiner类的构造方法Java8 StringJoiner类的方法分割案例添加前缀和后缀合并两个StringJoinerStringJoiner方法Ja...
    99+
    2022-11-13
    Java8 StringJoiner类使用 Java StringJoiner类 Java StringJoiner
  • 如何使用StringJoiner
    本篇内容介绍了“如何使用StringJoiner”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本使用从字...
    99+
    2024-04-02
  • 怎么在Java8中使用StringJoiner类拼接字符串
    怎么在Java8中使用StringJoiner类拼接字符串?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假设现在遍历一个字符串集合,需求是每个元素按照 “.” 分开。Str...
    99+
    2023-06-06
  • Java中StringJoiner工具的使用方法
    这篇文章将为大家详细讲解有关Java中StringJoiner工具的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景在平时的业务开发中,我们可能会遇到字符串列表根据分隔符进行拼接的需求。比如:输...
    99+
    2023-06-15
  • Java8中如何使用方法引用
    本篇文章给大家分享的是有关Java8中如何使用方法引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法。...
    99+
    2023-05-31
    java8 方法引用 ava
  • Java8 Time Api如何使用
    本篇内容主要讲解“Java8 Time Api如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java8 Time Api如何使用”吧!1.概述作为...
    99+
    2023-06-30
  • 如何在java8中使用reduce()求和
    这篇文章将为大家详细讲解有关如何在java8中使用reduce()求和,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.stream().reduce()单字段求和(1)普通数字求和&nbs...
    99+
    2023-06-15
  • Java8中如何使用日期时间
    Java8中如何使用日期时间,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。初始化日期时间初始化2020年11月11日11点11分11秒时间,这样可行吗日志输出时...
    99+
    2023-06-15
  • 如何在Java8中使用Optional判空
    本篇文章给大家分享的是有关如何在Java8中使用Optional判空,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、导语在没有用Optional判空之前,你是否也像下面的代码...
    99+
    2023-06-15
  • 如何在Java8中使用lambda表达式
    这篇文章给大家介绍如何在Java8中使用lambda表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 0. 函数式编程    函数式编程(Functional Pr...
    99+
    2023-06-14
  • lambda表达式如何在JAVA8中使用
    这期内容当中小编将会给大家带来有关lambda表达式如何在JAVA8中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:什么是 Stream?Stream(流)是一个来自数据源的元素队列并支持聚合操作...
    99+
    2023-06-15
  • 如何使用Java8中的Function接口消灭if...else
    这篇文章给大家分享的是有关如何使用Java8中的Function接口消灭if...else的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在开发过程中经常会使用if...else...进行判断抛出异常、分支处理等操...
    99+
    2023-06-29
  • 如何正确的在Java8中使用lambda表达式
    如何正确的在Java8中使用lambda表达式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.基本介绍lambda表达式,即带有参数的表达式,为了更清晰地理解lambda...
    99+
    2023-05-31
    java8 lambda ava
  • Java8 Collectors.toMap() 的使用
    目录 一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重 二、Duplicate key 异常1)异常重现:2)异常截图:3)异常说明:4...
    99+
    2023-09-12
    java jvm 面试
  • Java8中Stream的使用方式
    目录前言:1. 为什么有经验的老手更倾向于使用Stream2. Stream 的使用方式3. Stream 的创建4. Stream 中间操作5. Stream 终止操作6. Str...
    99+
    2024-04-02
  • Java8中CompletableFuture怎么使用
    今天小编给大家分享一下Java8中CompletableFuture怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1...
    99+
    2023-06-29
  • Java8中Stream怎么使用
    今天小编给大家分享一下Java8中Stream怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、概述Java 8 是...
    99+
    2023-07-02
  • 详解Java8中CompletableFuture类的使用
    目录创建CompletableFuture处理CompletableFuture的结果处理CompletableFuture的异常总结Java 8中引入了CompletableFut...
    99+
    2023-05-15
    Java8 CompletableFuture类使用 Java8 CompletableFuture类 Java8 CompletableFuture
  • Java8中Optional类的使用说明
    目录简介 历史null带来的种种问题方案 场景引入 方法说明构造函数创建Optional对象使用map从Optional对象中提取和转换值使用flatMap链接Optional对象默...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作