JDK-8197594 (“ String#repeat”)在其“描述”中包括以下内容:“长期以来,一直要求一种用于重复字符序列的String
方法,没有后续操作。” 可以在JDK-8197594的“问题链接”中找到有关String类中用于重复字符序列的方法的兴趣,这些方法包括JDK-8055862 [“提供字符串重复方法”]和JDK-6984084 [“( str)n次重复java.lang.String的字符构造函数”]。 这两个链接问题都描述了在String
类中使用这种方法的动机。 进一步的证据包括在线问题,例如在Java 中重复字符串的 简单方法 , 如何 在Java 中重复字符串“ n”次? , 在Java中重复字符串的简单方法是什么? ,以及如何在Java编程中将字符串重复n次?
Guava通过其Strings.repeat(String,int)方法提供了此所需的行为,而Apache Commons Lang通过其StringUtils.repeat(String,int)提供了此功能。 此功能也可能在单个项目中实现了数百次或更多次 。 标准java.lang.String.repeat(String, int)
方法的可用性可以替代所有这些方法。
关于JDK-8197594的core-libs-dev JDK邮件列表的讨论提供了一些其他有趣的细节,这些细节可能会添加到Java的未来版本中。
Jim Laskey的消息中提到了一个有趣的观点,他在其中描述了该方法将提供的潜在性能改进。 具体来说,Laskey写道:“以jmh运行性能……表明这些方法比StringBuilder等效方法要快得多”,Laskey将此归因于“内存分配减少了”,“字符到字节数组的转换减少了”以及“金字塔复制与O相比更快( N)复制。” 由于这是开源的,在目前提出的实现是导致这些性能优势提供 。 对于感兴趣的人,上述两个开放源代码项目显然已经提供了其源代码[ Guava的Strings.repeat(String,int)和Apache Commons Lang的String repeat(String,int) ]。
Brian Goetz发布了在标准API中添加诸如String.repeat
的方法的第二个原因:将通过语句实现的通用功能转换为可组合的表达式。 Goetz解释说:“我对这类方法的主要动机是,将需要执行的内容作为_statements_(循环,if-then等)并将它们转换为_expressions_,这主要不是因为它们更紧凑,而是因为它们变得_composible_ 。” Goetz之前已经描述了表达式的优点,这是JEP草案中与Java中的开关表达式相关的主要动机之一。
用java.lang.String
上的一种新方法将字符序列重复指定的次数不会像其他许多新的API新增功能和新的语言功能那样繁重,但是它可以提供一些优点,例如不需要第三次方或自定义实现,改进的性能以及常用实现行为的标准化表示形式。 在撰写本文时, JDK-8197594未与特定的Java版本关联,而是标记为“ tbd_feature ”。
翻译自: https://www.javacodegeeks.com/2018/02/stringrepeat-coming-java.html