旧瓶装新酒的 Java 8 StringJoiner
2016-07-24 00:00
766 查看
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!
终于,Java 8在java.util软件包下发布了StringJoiner类。我认为相对于我们使用StringBuffer / StringBuilder的旧式做法来连接字符串,这并非是一个迥然不同的实现。我们一起来看一看StringJoiner的用法和它的内部实现。
例如,我有两个字符串为“Smart”和“Techie”,我想连接这些字符串为[Smart,Techie]。在这种情况下,我的前缀为“[”,后缀为“]”,以及分隔符为“,”。 StringJoiner有如下两个构造函数。
我们想要有前缀和后缀,因此在例子中使用第二个构造函数。
如果我们不希望有前缀和后缀,那么就:
现在,我们将看到add和toString()方法的实现。
prepareBuilder()实现如下。
从上面的实现中,可以很明显看到StringJoiner遵循老式的做法。
toString()实现如下。
学习快乐!
终于,Java 8在java.util软件包下发布了StringJoiner类。我认为相对于我们使用StringBuffer / StringBuilder的旧式做法来连接字符串,这并非是一个迥然不同的实现。我们一起来看一看StringJoiner的用法和它的内部实现。
例如,我有两个字符串为“Smart”和“Techie”,我想连接这些字符串为[Smart,Techie]。在这种情况下,我的前缀为“[”,后缀为“]”,以及分隔符为“,”。 StringJoiner有如下两个构造函数。
StringJoiner(CharSequence delimiter)
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
我们想要有前缀和后缀,因此在例子中使用第二个构造函数。
StringJoiner sjr = new StringJoiner(",", "[", "]"); sjr.add("Smart").add("Techie"); System.out.println("The final Joined string is " + sjr);
如果我们不希望有前缀和后缀,那么就:
sjr1.add("Smart").add("Techie"); System.out.println("The final Joined string is " + sjr1);
现在,我们将看到add和toString()方法的实现。
public StringJoiner add(CharSequence newElement) { prepareBuilder().append(newElement); return this; }
prepareBuilder()实现如下。
private StringBuilder prepareBuilder() { if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; }
从上面的实现中,可以很明显看到StringJoiner遵循老式的做法。
toString()实现如下。
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; } }
学习快乐!
相关文章推荐
- Java函数为什么没有默认参数
- 获取所有根路径(磁盘分区)的空间详情
- Java双缓冲技术
- java语法基础
- java反射与代理
- Spring MVC一些常见注解的使用(一)关于url的一些注解
- Java单例模式深入详解
- Java集合框架(二)day_16
- java多线程-concurrent-CountDownLatch和CyclicBarrier
- java多线程-concurrent-Semaphore信号量
- Java 注解
- 常见java异常赏析
- Could not load java.net.BindException异常的解决办法
- Java正则表达式详解
- JavaBeansDataExchange could not instantiate result class
- 移除java.util.List中的元素
- Java security KeyStore Cipher
- 右键菜单打开文件所在文件夹的插件EasyExplore
- 更改java.util.List中的对象引用String java.util.List.set(int index, String element)
- 追MM与Java的23钟设计模式