java11中String類新增加的方法說明

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方法,它們產生一樣的結果如下圖所示:

java11中String類新增加的方法說明

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() + "'");

}

當上面代碼執行時,得到的效果如下圖所示:

java11中String類新增加的方法說明

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。這個很好理解,只要字符串中不包括實際的字符就是空。

java11中String類新增加的方法說明

上面添加到JDK 11的方法 雖說只是 String 是一些小的補充,但在以後的軟件開發中確實帶來了方便,因此我們的工具包可以縮減一下了。


分享到:


相關文章: