Java11已发布,String还能这样玩!

开发 后端
在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。

 [[252241]]

在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。

Java 11 增加了一系列的字符串处理方法,如以下所示。 

  1. // 判断字符串是否为空白  
  2. " ".isBlank();                // true  
  3. // 去除首尾空格  
  4. " Javastack ".strip();          // "Javastack"  
  5. // 去除尾部空格   
  6. " Javastack ".stripTrailing();  // " Javastack"  
  7. // 去除首部空格   
  8. " Javastack ".stripLeading();   // "Javastack "  
  9. // 复制字符串  
  10. "Java".repeat(3);             // "JavaJavaJava"  
  11. // 行数统计  
  12. "A\nB\nC".lines().count();    // 3 

最有意思的是 repeat 和 lines 方法了,来看下还能怎么玩!

repeat

repeat 方法的作用就是重复一个字符串 N 遍,可以用来代替工具类:org.apache.commons.lang3.StringUtils#repeat(java.lang.String, int),来看下 repeat 的源码。 

  1. public String repeat(int count) {  
  2.     if (count < 0) {  
  3.         throw new IllegalArgumentException("count is negative: " + count);  
  4.     }  
  5.     if (count == 1) {  
  6.         return this;  
  7.     }  
  8.     final int len = value.length;  
  9.     if (len == 0 || count == 0) {  
  10.         return "";  
  11.     }  
  12.     if (len == 1) {  
  13.         final byte[] single = new byte[count];  
  14.         Arrays.fill(single, value[0]);  
  15.         return new String(single, coder);  
  16.     }  
  17.     if (Integer.MAX_VALUE / count < len) {  
  18.         throw new OutOfMemoryError("Repeating " + len + " bytes String " + count +  
  19.                 " times will produce a String exceeding maximum size.");  
  20.     }  
  21.     final int limit = len * count;  
  22.     final byte[] multiple = new byte[limit];  
  23.     System.arraycopy(value, 0, multiple, 0, len);  
  24.     int copied = len 
  25.     for (; copied < limit - copied; copied <<= 1) {  
  26.         System.arraycopy(multiple, 0, multiple, copied, copied);  
  27.     }  
  28.     System.arraycopy(multiple, 0, multiple, copied, limit - copied);  
  29.     return new String(multiple, coder);  

来看下更多的用法。 

  1. String str = "Java" 
  2. // 小于0:java.lang.IllegalArgumentException  
  3. System.out.println(str.repeat(-2));  
  4. // 等于0:空白串("")  
  5. System.out.println(str.repeat(0));  
  6. // JavaJavaJava  
  7. System.out.println(str.repeat(3));  
  8. // java.lang.OutOfMemoryError  
  9. System.out.println(str.repeat(Integer.MAX_VALUE)); 

所以说 repeat 并不是可以***增长的,有使用限制的,达到一定量就会报内存溢出异常。

lines 

  1. public Stream<String> lines() {  
  2.     return isLatin1() ? StringLatin1.lines(value)  
  3.                       : StringUTF16.lines(value);  

lines 方法返回一个字符串 Stream, 可以识别 \n 和 \r 换行符换行。 

  1. // 4  
  2. System.out.println("A\nB\nC\rD".lines().count()); 

是不是很好?在将来肯定有武之地!如批量读取文件内容到一个 Stream 中,就能很好的识别行结束符了。

责任编辑:庞桂玉 来源: Java技术栈
相关推荐

2020-11-16 13:38:31

PostMessage

2021-07-28 06:10:47

拖拽设计器 transmat

2021-09-05 07:55:37

前端Emoji 表情

2024-08-02 08:38:20

Controller接口地址

2021-04-09 08:23:30

Css前端加载动画

2024-01-30 09:21:29

CSS文字效果文字装饰

2023-02-26 00:00:02

字符串分割String

2020-05-22 10:00:08

数据库数据库设计软件设计

2021-01-30 07:51:59

微信微信8.0腾讯

2023-01-30 08:46:20

GoGo1兼容性

2022-10-31 08:47:21

人脸识别按键键盘

2019-11-08 10:48:07

Windows操作系统微信Windows 10

2021-10-29 07:49:22

Spring事务管理

2022-02-09 15:55:01

JavaHttpClientJAVA11

2016-09-23 15:36:53

Windows10开始菜单程序

2020-05-09 16:45:56

ping命令Linux

2012-07-13 11:32:16

网络出口

2020-09-14 11:26:54

BinlogCanal数据库

2009-06-11 10:47:16

Fedora 11Fedora 11下载Fedora

2024-10-28 07:10:00

scroll标记前端网格布局
点赞
收藏

51CTO技术栈公众号