Java 11 已發布,String 還能這樣玩!

在文章《Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼》中,我有介紹到 Java 11 的八個新特性,其中關于 String 加強部分,我覺得有點意思,這里單獨再拉出來講。

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

// 判斷字符串是否為空白
" ".isBlank();                // true// 去除首尾空格
" Javastack ".strip();          // "Javastack"// 去除尾部空格 
" Javastack ".stripTrailing();  // " Javastack"// 去除首部空格 
" Javastack ".stripLeading();   // "Javastack "// 復制字符串
"Java".repeat(3);             // "JavaJavaJava"// 行數統計
"A\nB\nC".lines().count();    // 3

最有意思的是 repeatlines 方法了,來看下還能怎么玩!

repeat

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

public String repeat(int count) {if (count < 0) {throw new IllegalArgumentException("count is negative: " + count);}if (count == 1) {return this;}final int len = value.length;if (len == 0 || count == 0) {return "";}if (len == 1) {final byte[] single = new byte[count];Arrays.fill(single, value[0]);return new String(single, coder);}if (Integer.MAX_VALUE / count < len) {throw new OutOfMemoryError("Repeating " + len + " bytes String " + count +" times will produce a String exceeding maximum size.");}final int limit = len * count;final byte[] multiple = new byte[limit];System.arraycopy(value, 0, multiple, 0, len);int copied = len;for (; copied < limit - copied; copied <<= 1) {System.arraycopy(multiple, 0, multiple, copied, copied);}System.arraycopy(multiple, 0, multiple, copied, limit - copied);return new String(multiple, coder);
}

來看下更多的用法。

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

所以說 repeat 并不是可以無限增長的,有使用限制的,達到一定量就會報內存溢出異常。

lines

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

lines 方法返回一個字符串 Stream, 可以識別 \n\r 換行符換行。

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

是不是很好?在將來肯定有武之地!如批量讀取文件內容到一個 Stream 中,就能很好的識別行結束符了。

本文原創首發于微信公眾號:Java技術棧(id:javastack),關注公眾號在后臺回復 "新特性" 可獲取更多,轉載請原樣保留本信息。

轉載于:https://www.cnblogs.com/javastack/p/10106538.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis1 晨考題

Redis1 晨考題 1.Redis 是什么 &#xff1f; redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 的內存數據庫&#xff0c;并提供多種語言的 API。 2.NOSQL 是什么 &#xff1f;出現的目的和意義是什么 &#xff1f; NoSQL 泛指…

C語言void關鍵字

void 有什么好講的呢&#xff1f;如果你認為沒有&#xff0c;那就沒有&#xff1b;但如果你認為有&#xff0c;那就真的有。有點像“色即是空&#xff0c;空即是色”。一、void a&#xff1f; void 的字面意思是“空類型”&#xff0c;void *則為“空類型指針”&#xff0c;vo…

深入了解RabbitMQ工作原理及簡單使用

深入了解RabbitMQ工作原理及簡單使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的環境搭建深入了解RabbitMQ工作原理及簡單使用RabbitMQ交換器Exchange介紹與實踐RabbitMQ事務和Confirm發送方消息確認——深入解讀使用Docker部署RabbitMQ集群你不知道的RabbitMQ集群架構全解RabbitM…

使用el-checkbox實現全選,點擊失效沒有反應

最近在公司接收到了一個需求&#xff0c;給收藏夾的書籍添加批量、全選刪除實現思路&#xff1a;點擊全選改變item的checked&#xff0c;改變item的checked&#xff0c;重新便利一下所有item的checked來改變全選的selectAll1&#xff09;該組件基本功能已經實現&#xff0c;che…

Spring3.2新注解@ControllerAdvice

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ControllerAdvice&#xff0c;是spring3.2提供的新注解&#xff0c;從名字上可以看出大體意思是控制器增強。讓我們先看看ControllerAdv…

Mysql1 晨考題

Mysql1 晨考題 1.描述主鍵、外鍵、候選主鍵、超鍵分別是什么 &#xff1f; &#xff08;1&#xff09;主鍵&#xff1a;數據庫表中對存儲數據對象給予唯一完整標識的數據列或屬性的組合。一個數據列只能有一個主 鍵&#xff0c;且主鍵的取值不能缺失&#xff0c;即不能為空值…

C語言關鍵字

C語言do、while、for關鍵字—循環 C 語言中循環語句有三種&#xff1a;while 循環、do-while 循環、for 循環。while 循環&#xff1a;先判斷while 后面括號里的值&#xff0c;如果為真則執行其后面的代碼&#xff1b;否則不執行。while&#xff08;1&#xff09;表示死循環。…

C語言字符篇(五)內存函數

memcpy不可以把目的地址寫成本身但是memmove可以,因為它是先保存到臨時空間 #include <string.h> void *memcpy(void *dest, const void *src, size_t n);將內存src拷貝n個字符到內存destvoid *memmove(void *dest, const void *src, size_t n);將內存src的前n個數據拷貝…

GMQ交易平臺大力探索區塊鏈技術,進一步推動產業繁榮

近年來&#xff0c;區塊鏈技術作為金融科技的中堅力量&#xff0c;受到了產業界的熱切關注&#xff0c;其實驗開展和應用研發正在如火如荼的進行。 在此背景下&#xff0c;各地涌現出一大批優秀的企業投入到區塊鏈產業中&#xff0c;各類企業投融 資活動十分活躍&#xff0c;充…

java 筆試題

JAVA-2003筆試題 一、選擇題&#xff08;每小題2&#xff0c;共10分&#xff09; 下列語句序列執行后&#xff0c;m 的值是&#xff08; C &#xff09; int a10, b3, m5; if( ab ) ma; else ma*m; A.15 B.50 C.55 D.5若已定義byte[]x{11,22,33,-66}其中0≤k≤3&#xff0c;則…

objectdatasouce的溫故

在做ecxel的時候&#xff0c;需要前臺做一個聯動的效果。 記錄一下這個數據源的用法&#xff0c;大學時候用的&#xff0c;忘得差不多了 首先就是往頁面拖拽一個objectdatasouce的控件 然后配置數據源&#xff1a; 選擇業務對象(其實就是選擇你要用的哪個類&#xff0c;如果下拉…

都會五星回評,歡迎留下地址-博客之星

歡迎五星回評地址https://bbs.csdn.net/topics/603961857

jQuery核心

jQuery(selector) jQuery 的核心功能都是通過這個函數實現的。 jQuery中的一切都基于這個函數&#xff0c;或者說都是在以某種方式使用這個函數。這個函數最基本的用法就是向它傳遞一個表達式&#xff08;通常由 CSS 選擇器組成&#xff09;&#xff0c;然后根據這個表達式來查…

Feign api調用方式

Feign使用簡介 基本用法 基本的使用如下所示&#xff0c;一個對于canonical Retrofit sample的適配。 interface GitHub {// RequestLine注解聲明請求方法和請求地址,可以允許有查詢參數RequestLine("GET /repos/{owner}/{repo}/contributors")List<Contributor&g…

預處理

C語言##預算符 和#運算符一樣&#xff0c;##運算符可以用于宏函數的替換部分。這個運算符把兩個語言符號組合成單個語言符號。看例子&#xff1a;#define XNAME(n) x ## n如果這樣使用宏&#xff1a;XNAME(8)則會被展開成這樣&#xff1a;x8看明白了沒&#xff1f; ##就是個粘合…

Lambda表達式使用2

1.概述    本篇主要介紹lambda中常用的收集器&#xff0c;收集器的作用就是從數據流中生成需要的數據接口。    最常用的就是Collectors.toList()&#xff0c;只要將它傳遞給collect()函數&#xff0c;就能夠使用它了。    在我們使用收集器的時候經常會用到“方法…

notepad++ 使用去掉自動檢查紅線

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 notepad新升級了之后就有自動判斷的紅線&#xff0c;單詞拼錯了就給提示&#xff0c;看著這紅線實在難受 在 菜單選項&#xff1a;[插件…

cAdvisor+InfluxDB+Grafana 監控Docker

容器的監控方案其實有很多&#xff0c;有docker自身的docker stats命令、有Scout、有Data Dog等等&#xff0c;本文主要和大家分享一下比較經典的容器開源監控方案組合&#xff1a;cAdvisorInfluxDBGrafan 一、概念 1). InfluxDB是什么nfluxDB是用GO語言編寫的一個開源分布式時…

C語言return關鍵字

return 用來終止一個函數并返回其后面跟著的值。return &#xff08;Val&#xff09;&#xff1b;//此括號可以省略。但一般不省略&#xff0c;尤其在返回一個表達式的值時。return 可以返回些什么東西呢&#xff1f;看下面例子&#xff1a;char * Func(void){char str[30];…r…

win7旗艦版怎么降級到專業版

一、操作準備及注意事項 1、UltraISO光盤制作工具9.5 2、備份C盤及桌面文件 二、win7旗艦版改成專業版的步驟 1、當前系統為Win7 SP1 64位旗艦版&#xff1b; 2、按WinR打開運行&#xff0c;輸入regedit打開注冊表編輯器&#xff0c;定位到HKEY_LOCAL_MACHINE\Software\Microso…