[ Java11 ] Java 11 新特性 - 字符串新方法

yufei       6 年, 3 月 前       3041

当我们绝大多数的应用和代码都还停留在 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*

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.