java sdk 版本每幾年就有一個大的更新,我們從jdk8中看到了lambda表達式。jdk9裡改進的stream api。jdk10中的變量修飾符var(有點類似vb了哈哈)。可以說每次更新都有一個進步。那麼據說jdk 11版本中,String類增加了以下方法(這不得不說為以後編寫代碼又省了不少工夫):
- String.repeat(int)
- String.lines()
- String.strip()
- String.stripLeading()
- String.stripTrailing()
- String.isBlank()
String.repeat(int)
String.repeat(int) 方法,同名字一樣,主要實現字符串複製的功能。根據方法中int參數的值複製字符串N次. 就像Python中的字符串*N一樣的功能,只是jdk有點慢了,早點像Python學習一下也是不錯的。
使用 String.repeat(int)的例子
/**
* Write provided {@code String} in header. Note that this
* implementation uses {@code String.repeat(int)}.
*
* @param headerText Title of header.
*/
private static void writeHeader(final String headerText)
{
final String headerSeparator = "=".repeat(headerText.length()+4);
out.println("\\n" + headerSeparator);
out.println("= " + headerText + " =");
out.println(headerSeparator);
}
writeHeader(String) 方法很容易使用 String.repeat(int)方法產生有規則的標題格式。上面調用的repeat方法我們傳遞的參數是headerText的長度加4,這裡的4是因為我們在headerText的前後分別加了“等號空格”和“空格等號”。比如我們調用:writeHeader("test");那麼最後打印的效果是:
========
= test =
========
String.lines()
String.lines() 方法根據換行符自動將字符串分隔成String類型的流。.
Use of String.lines()
/**
* Demonstrate method {@code String.lines()} added with JDK 11.
*/
public static void demonstrateStringLines()
{
final String originalString = prepareStringWithLineTerminators();
final String stringWithoutLineSeparators
= originalString.replaceAll("\\\\n", "\\\\\\\\n");
writeHeader("String.lines() on '" + stringWithoutLineSeparators + "'");
final Stream<string> strings = originalString.lines(); /<string>
strings.forEach(out::println);
}
上面的代碼,分別使用了String類的replaceAll方法和jdk11中的lines方法,它們產生一樣的結果如下圖所示:
String.strip() / String.stripLeading() / String.stripTrailing()
String.strip(), String.stripLeading(),String.stripTrailing() 方法分別用來:過濾字符串中所有空格,只過濾字符串前面空格,只過濾字符串後面空格的功能。
Use of String.strip() / String.stripLeading() / String.stripTrailing()
/**
* Demonstrate method {@code String.strip()} added with JDK 11.
*/
public static void demonstrateStringStrip()
{
final String originalString = prepareStringSurroundedBySpaces();
writeHeader("String.strip() on '" + originalString + "'");
out.println("'" + originalString.strip() + "'");
}
/**
* Demonstrate method {@code String.stripLeading()} added with JDK 11.
*/
public static void demonstrateStringStripLeading()
{
final String originalString = prepareStringSurroundedBySpaces();
writeHeader("String.stripLeading() on '" + originalString + "'");
out.println("'" + originalString.stripLeading() + "'");
}
/**
* Demonstrate method {@code String.stripTrailing()} added with JDK 11.
*/
public static void demonstrateStringStripTrailing()
{
final String originalString = prepareStringSurroundedBySpaces();
writeHeader("String.stripTrailing() on '" + originalString + "'");
out.println("'" + originalString.stripTrailing() + "'");
}
當上面代碼執行時,得到的效果如下圖所示:
String.isBlank()
String類的isBlank()方法用來判斷指定的字符串是否為空,這個方法也是一個遲到的方法了。像C#中的String類的IsNullOrEmpty ()方法,筆者使用就感覺非常爽,在java代碼中就只能使用if(s!=null && !a.equals(""),必需要判斷是否為null,不然為null的話,使用equals方法就會報空指針異常了)這麼來判斷字符串變量s是否為空.
使用 String.isBlank()方法
/**
* Demonstrate method {@code String.isBlank()} added with JDK 11.
*/
public static void demonstrateStringIsBlank()
{
writeHeader("String.isBlank()");
final String emptyString = "";
out.println("Empty String -> " + emptyString.isBlank());
final String onlyLineSeparator = System.getProperty("line.separator");
out.println("Line Separator Only -> " + onlyLineSeparator.isBlank());
final String tabOnly = "\\t";
out.println("Tab Only -> " + tabOnly.isBlank());
final String spacesOnly = " ";
out.println("Spaces Only -> " + spacesOnly.isBlank());
}
上面的代碼執行時,無論是空字符,還是系統換行符或是製表符、空格等,調用isBlank方法時返回的結果都是True。這個很好理解,只要字符串中不包括實際的字符就是空。
上面添加到JDK 11的方法 雖說只是 String 是一些小的補充,但在以後的軟件開發中確實帶來了方便,因此我們的工具包可以縮減一下了。
閱讀更多 子曰java 的文章