摘要:在文章正式發布,這個逆天新特性教你寫出更牛逼的代碼中,我有介紹到的八個新特性,其中關于加強部分,我覺得有點意思,這里多帶帶再拉出來講。是不是很好在將來肯定有武之地如批量讀取文件內容到一個中,就能很好的識別行結束符了。
在文章《Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼》中,我有介紹到 Java 11 的八個新特性,其中關于 String 加強部分,我覺得有點意思,這里多帶帶再拉出來講。
Java 11 增加了一系列的字符串處理方法,如以下所示。
// 判斷字符串是否為空白 " ".isBlank(); // true // 去除首尾空格 " Javastack ".strip(); // "Javastack" // 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack" // 去除首部空格 " Javastack ".stripLeading(); // "Javastack " // 復制字符串 "Java".repeat(3); // "JavaJavaJava" // 行數統計 "A B C".lines().count(); // 3
最有意思的是 repeat 和 lines 方法了,來看下還能怎么玩!
repeatrepeat 方法的作用就是重復一個字符串 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 并不是可以無限增長的,有使用限制的,達到一定量就會報內存溢出異常。
linespublic Streamlines() { return isLatin1() ? StringLatin1.lines(value) : StringUTF16.lines(value); }
lines 方法返回一個字符串 Stream, 可以識別 和 換行符換行。
// 4 System.out.println("A B C D".lines().count());
是不是很好?在將來肯定有武之地!如批量讀取文件內容到一個 Stream 中,就能很好的識別行結束符了。
本文原創首發于微信公眾號:Java技術棧(id:javastack),關注公眾號在后臺回復 "新特性" 可獲取更多,轉載請原樣保留本信息。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72660.html
摘要:都快要來了,必須跟棧長學起即將發布,新特性必須搶先看棧長之前在技術棧微信公眾號分享過已發布,還能這樣玩這篇文章,介紹了的新玩法,讓大家耳目一新。更多關于的資訊干貨教程以及好消息,請關注微信公眾號技術棧,第一時間推送。 Java 13 都快要來了,12必須跟棧長學起! Java 13 即將發布,新特性必須搶先看! 棧長之前在Java技術棧微信公眾號分享過《Java 11 已發布,Stri...
摘要:如圖所示,帶有的所有線程構造方法都可以定義線程組的。線程組還能統一設置組內所有線程的最高優先級,線程單獨設置的優先級不會高于線程組設置的最大優先級。 前面的文章,棧長和大家分享過多線程創建的3種方式《實現 Java 多線程的 3 種方式》。 但如果線程很多的情況下,你知道如何對它們進行分組嗎? 和 Dubbo 的服務分組一樣,Java 可以對相同性質的線程進行分組。 來看下線程類 Th...
摘要:記得幾年前有一次棧長去面試,問到了這么一個問題中的對象都是在堆中分配嗎說明為什么當時我被問得一臉蒙逼,瞬間被秒殺得體無完膚,當時我壓根就不知道他在考什么知識點,難道對象不是在堆中分配嗎最后就沒然后了,回去等通知了。。 記得幾年前有一次棧長去面試,問到了這么一個問題: Java中的對象都是在堆中分配嗎?說明為什么! 當時我被問得一臉蒙逼,瞬間被秒殺得體無完膚,當時我壓根就不知道他在考什么...
摘要:為什么叫重入鎖呢,我們把它拆開來看就明了了。釋放鎖,每次鎖持有者數量遞減,直到為止。 相信大家在工作或者面試過程中經常聽到重入鎖這個概念,或者與關鍵字 synchrozied 的對比,棧長面試了這么多人,80%的面試者都沒有答對或沒有答到點上,或者把雙重效驗鎖搞混了,哭笑不得。。 那么你對重入鎖了解有多少呢?今天,棧長幫大家撕開重入鎖的面紗,來見識下重入鎖的真實容顏。。 什么是重入鎖 ...
閱讀 2570·2021-11-23 09:51
閱讀 3120·2019-08-30 15:54
閱讀 1070·2019-08-30 14:14
閱讀 3542·2019-08-30 13:59
閱讀 1393·2019-08-29 17:09
閱讀 1468·2019-08-29 16:24
閱讀 2848·2019-08-29 15:43
閱讀 911·2019-08-29 12:45