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"