拼接字符串新姿势—StringJoiner,三年经验Java开发面经总结


StringJoiner 是 java.util 包中的一个类,用于构造一个由分隔符分隔的字符串,并且可以从提供的前缀字符串开头,以提供的后缀字符串结尾。虽然这些功能,我们可以使用 StringBuilder 或者 StringBuffer 来实现的, 但是 StringJoiner 提供的方法更简单,而且也不需要写大量的代码就能成。

构造函数


StringJoiner 一共有 2 个构造函数。 构造函数很简单,就是对 分隔符,前缀和后缀字符串的初始化。

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();

//空值被设置为只有前后缀

this.emptyValue = this.prefix + this.suffix;

}

用法


StringJoiner 的用法其实很简单,来,我们看一下 StringJoiner 字符串拼接的用法。

public class StringJoinerTest {

public static void main(String[] args) {

StringJoiner sj = new StringJoiner(“hello”);

sj.add("Java 8 ");

sj.add(“Java 11”);

System.out.println(sj.toString());

StringJoiner sj1 = new StringJoiner(":","[","]");

sj1.add(“Java8”).add(“Java11”).a

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

dd(“Java15”);

System.out.println(sj1.toString());

}

}

输出结果:

Java 8 helloJava 11

[Java8:Java11:Java15]

注意:

  1. 当我们使用StringJoiner(CharSequence delimiter)初始化一个StringJoiner的时候,这个delimiter其实是分隔符,并不是字符串的初始值。

  2. StringJoiner(CharSequence delimiter,CharSequence prefix,CharSequence suffix)的第二个和第三个参数分别是拼接后的字符串的前缀和后缀。

源码分析


JDK8中源码

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();

value.setLength(initialLength);

return result;

}

}

}

public StringJoiner add(CharSequence newElement) {

prepareBuilder().append(newElement);

return this;

}

public StringJoiner merge(StringJoiner other) {

Objects.requireNonNull(other);

if (other.value != null) {

final int length = other.value.length();

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() {

return (value != null ? value.length() + suffix.length() :

emptyValue.length());

}

JDK11中源码

public final class StringJoiner {

private String[] elts;

@Override

public String toString() {

final String[] elts = this.elts;

if (elts == null && emptyValue != null) {

return emptyValue;

}

final int size = this.size;

final int addLen = prefix.length() + suffix.length();

if (addLen == 0) {

compactElts();

return size == 0 ? “” : elts[0];

}

final String delimiter = this.delimiter;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面经是指在面试过程中常被问到的与Java相关的问题和知识点。下面是一些常见的Java面经问题及其解答: 1. Java的特点是什么? Java是一种面向对象的编程语言,具有跨平台性、简单性、可靠性、安全性和高性能等特点。 2. 什么是Java虚拟机(JVM)? JVM是Java程序运行的环境,它负责将Java源代码编译成字节码,并在不同的操作系统上执行。 3. 什么是面向对象编程(OOP)? 面向对象编程是一种编程范式,它将数据和操作数据的方法封装在一起,通过创建对象来实现程序的功能。 4. Java中的四种访问修饰符分别是什么? Java中的四种访问修饰符分别是public、protected、default和private,用于控制类、方法和变量的访问权限。 5. 什么是Java中的异常处理机制? 异常处理机制是Java中用于处理程序运行过程中出现的异常情况的一种机制,通过try-catch-finally语句块来捕获和处理异常。 6. 什么是Java中的多线程? 多线程是指在一个程序中同时执行多个线程,每个线程都可以独立执行不同的任务,提高程序的并发性和效率。 7. 什么是Java中的集合框架? 集合框架是Java中用于存储和操作一组对象的类库,包括List、Set、Map等常用的数据结构和算法。 8. 什么是Java中的反射机制? 反射机制是指在运行时动态地获取和操作类的信息,可以通过反射来创建对象、调用方法和访问属性等。 9. 什么是Java中的IO流? IO流是Java中用于输入和输出数据的一种机制,包括字节流和字符流,用于读取和写入文件、网络等数据源。 10. 什么是Java中的设计模式? 设计模式是一种解决常见软件设计问题的经验总结,包括单例模式、工厂模式、观察者模式等常用的设计模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值