当我们绝大多数的应用和代码都还停留在 Java 1.7 1.8 的年代,Java 11 都进入特性冻结阶段了。而且根据 Java 11 的里程碑,下个月的,也就是 2018 年 9 月 25 日就会正是发布了
快不快 ? 一下没回神,结果发现拉下了好远的距离
废话不多说了,我们来看看 Java 11 到底有啥新面貌
声明下,这是一篇翻译文章,原文链接为 http://d.hatena.ne.jp/nowokay/20180707#1530712754
Java 11
2018 年 06 月 28 日,Java 11 正是进入 Rampdown phase
,也就意味着 Java 11 进入特性冻结阶段,之后的版本将只会修复 bug。那么,我们就来看看 Java 11 有哪些新功能吧
嗯,其实 Java 11 的修改还是蛮多的,尤其是一些小修小改,一些大的修改都会罗列在 JEPs 上,如果你想浏览全部的大的修改,可以访问 JDK 11
本文接下来的章节,我们只介绍一些我所知道的
安装 Java 11
其实,Java 11 已经可以下载安装了,下载地址为 http://jdk.java.net/11/
如果你不知道如何安装,可以访问我们的 Java 基础教程:开发环境配置
如果你只是体验目的,就不要安装了,直接解压,然后打开 Shell,然后一路使用 cd
命令跳转到 bin
目录,最后输入 jshell
就会进入 Java 交互式 shell 工具
$ ./jshell | 欢迎使用 JShell -- 版本 11-ea | 要大致了解该版本, 请键入: /help intro jshell>
注意:Java11 并没有最终发布,所以不适合生产环境使用,可以保留以前的版本。当前版本只适合体验
String 字符串
lines() 方法
Java 11 中新增加了 lines()
方法可以一次性将字符串按照换行符分割并返回所有行的流,使用方法如下
jshell> "你好\n世界\n我爱你".lines() $1 ==> java.util.stream.ReferencePipeline$Head@6d7b4f4c
可以看到 line()
方法的返回值是一个流 java.util.stream.ReferencePipeline
如果要将流转化为数组,我们只要调用 ReferencePipeline
类的 toArray()
方法即可
jshell> "你好\n世界\n我爱你".lines().toArray() $2 ==> Object[3] { "你好", "世界", "我爱你" }
如果包含了 \r\n
看看是什么结果
jshell> "你好\n世界\r\n我爱你".lines().toArray() $3 ==> Object[3] { "你好", "世界", "我爱你" }
lines()
会把 \r
、 \n
、\r\n
都当作换行符处理
repeat()
repeat()
方法将字符串重复指定次数
jshell> "你好,".repeat(3) $6 ==> "你好,你好,你好,"
这个方法特有意思,如果传递的是负数,则会抛出异常
jshell> "你好,".repeat(-1) | Exception java.lang.IllegalArgumentException: count is negative: -1 | at String.repeat (String.java:3147) | at (#8:1)
这也没什么,很正常的感觉,可是如果传递的是 0
,那么就返回空字符串了
jshell> "你好,".repeat(0) $7 ==> ""
isBlank()
isBlank
用于判断字符串是否全部都是空白符,需要注意的是,Java 语言使用 UTF-8
编码,所有 UTF-8
被视为空白符的,在 Java 中也一样
jshell> var halfSpace = "\u0020" halfSpace ==> " " jshell> halfSpace.isBlank() $10 ==> true jshell> var fullSpace = "\u3000" fullSpace ==> " " jshell> fullSpace.isBlank() $12 ==> true
strip() / stripLeading() / stripTrailing()
这三个方法类似于 trim()
/ trimLeft()
/ trimRight()
,不同之处是 strip*
会把多个空白符当作一个空白符来处理
方法 | 说明 |
---|---|
strip() | 删除字符串头尾的所有空白符 |
stripLeading() | 删除字符串左边 ( 头部 ) 的所有空白符 |
stripTrailing() | 删除字符串右边 ( 尾部 ) 的所有空白符 |
jshell> var aaa = fullSpace + "aaa" + fullSpace aaa ==> " aaa " jshell> aaa.strip() $14 ==> "aaa" jshell> aaa.trim() $15 ==> " aaa " jshell> aaa.stripLeading() $16 ==> "aaa " jshell> aaa.stripTrailing() $17 ==> " aaa"
是不是很无奈,两套类似的方法,实现的功能却不一样,其它语言中,只有一套,就是 strip*