在“ 使用JDK 11的Java字符串上的新方法 ”和“ String#repeat即将加入Java? ”,我讨论了JDK 11引入Java String的六个新方法。
可用的早期访问JDK 11构建已经包含了这些新方法,在这篇文章中,我将使用其中的一种早期访问构建对其进行演示。
我正在使用OpenJDK JDK 11 Early Access Build 20来编译和运行本文中显示的示例。
本文通过OpenJDK JDK 11 Early Access Build 20演示了为JDK 11添加到String
的六个方法:
-
String.repeat(int)
-
String.lines()
-
String.strip()
-
String.stripLeading()
-
String.stripTrailing()
-
String.isBlank()
GitHub上提供了本文中演示的示例的源代码。
String.repeat(int)
自从在Groovy中体验到String.repeat(int)
方法以来,该函数便提供了我希望在Java中看到的便捷功能。 顾名思义,此方法重复int
参数提供的String
次数。 将来在生成简单演示并将其用于本示例时,我可能会经常使用此方法。 下一个代码清单演示了如何使用String.repeat(int)
来为演示输出轻松生成标头分隔符。
使用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)
轻松地从“ =
”字符生成“标题分隔符”行,足以覆盖提供的headerText
长度和4个其他字符,以允许额外的“ =
”和额外的空间在“标题文本”的每一侧。 本文中的所有其他演示示例都使用writeHeader(String)
方法,因此将通过这些示例进行演示。
String.lines()
String.lines()
方法拆分由其行终止符在其上调用的String
,并返回由这些行终止符划分的Strings
Stream
。
使用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();strings.forEach(out::println);
}
输出示例显示在下一个屏幕快照中。
String.strip()/ String.stripLeading()/ String.stripTrailing()
String.strip()
, String.stripLeading()
和String.stripTrailing()
方法修剪目标String
的正面,背面或正面和背面的空白(由Character.isWhiteSpace()确定) 。
使用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()
方法指示目标String
是否为空或仅包含由Character.isWhitespace(int)确定的空格字符。
使用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());
}
下一个屏幕快照中显示了执行此代码的示例。
上面显示了代码的一些方法称为“ helper”方法,可以在GitHub上看到。
添加到JDK 11的String
中的方法是很小的添加,但是与过去相比,与Java String
相关的某些“演示”任务将变得更加容易,并减少了对第三方库的需求。
翻译自: https://www.javacodegeeks.com/2018/07/applying-new-jdk-11-string-methods.html