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