Java 12字符串方法

时间:2020-02-23 14:36:18  来源:igfitidea点击:

Java 12于2019年3月发布。
String类中添加了四个新方法。
在本教程中,我们将详细研究这些新方法。

1.indent(int n)

此方法根据'n'的值调整字符串中每行的缩进量,并标准化行终止符。

  • 如果n> 0,则在每行的开头插入n个空格(U + 0020)。

  • 如果n <0,则从每行开头最多删除n个空格字符。
    如果给定的行没有足够的空格,那么将删除所有前导空格字符。
    制表符也被视为单个字符。

  • 如果n = 0,则该行保持不变。
    但是,行终止符仍被标准化。

String str = "*\n  Hi\n  \tHello hyman\rHow are you?\n*";

System.out.println(str.indent(0));
System.out.println(str.indent(3));
System.out.println(str.indent(-3));

输出:

*
Hi
	Hello hyman
How are you?
*

 *
   Hi
   	Hello hyman
 How are you?
 *

*
Hi
Hello hyman
How are you?
*

让我们通过jshell看同样的例子。

➜  ~ jshell
|  Welcome to JShell -- Version 12
|  For an introduction type: /help intro

jshell> String str = "*\n  Hi\n  \tHello hyman\rHow are you?\n*";
str ==> "*\n  Hi\n  \tHello hyman\rHow are you?\n*"

jshell> str.indent(0)
 ==> "*\n  Hi\n  \tHello hyman\nHow are you?\n*\n"

jshell> str.indent(3)
 ==> "   *\n     Hi\n     \tHello hyman\n   How are you?\n   *\n"

jshell> str.indent(-3)
 ==> "*\nHi\nHello hyman\nHow are you?\n*\n"

jshell>

注意,调用indent()方法时,\ r被标准化为\ n。

2. transform(Function <?super String,?扩展R> f)

这个方法允许我们在给定的字符串上调用一个函数。
该函数应该期望一个String参数,并产生一个R结果。

让我们看一个示例,在该示例中,我们将使用transform()方法将CSV字符串转换为字符串列表。
注意使用lambda表达式来实现功能接口。

String s = "Hi,Hello,Howdy";
List strList = s.transform(s1 -> {return Arrays.asList(s1.split(","));});
System.out.println(strList);

输出:

3.可选的<String> describeConstable()

Java 12在JEP 334中引入了Constants API。
如果您查看String类文档,它实现了Constants API中的两个新接口– Constable和ConstantDesc。
此方法在Constable接口中声明,并在String类中实现。

此方法返回一个Optional,其中包含该实例的名义描述符,即实例本身。

String so = "Hello";
Optional os = so.describeConstable();
System.out.println(os);
System.out.println(os.get());

输出:

Optional[Hello]
Hello
Hello

4.字符串resolveConstantDesc((MethodHandles.Lookup查找)

此方法是Constants API的一部分,并在ConstantDesc接口中声明。
它将实例解析为ConstantDesc,其结果就是实例本身。

jshell> import java.lang.invoke.MethodHandles;

jshell> String so1 = "Hello";
so1 ==> "Hello"

jshell> so1.resolveConstantDesc(MethodHandles.lookup());
 ==> "Hello"