【问题标题】:Looking for concise alternative for RandomStringUtils寻找 RandomStringUtils 的简洁替代方案
【发布时间】:2017-11-29 12:25:24
【问题描述】:

这个问题已经过时了。 org.apache.commons:commmons-lang3:3.7 删除了 deprecated 标志,3.8 确认了这一点。

从3.5 更新到org.apache.commons:commons-lang3:3.6 后,我收到很多关于RandomStringUtils 被弃用的警告。建议的替代方案是来自commons-text 的RandomStringGenerator。但是,如果您想要的只是一个字符串(例如,在单元测试中),那么该类使用起来非常笨拙。比较:

String name1 = RandomStringUtils.randomAlphabetic(FIRST_NAME_LENGTH);
String name2 = new RandomStringGenerator.Builder().withinRange('a', 'z').build()
        .generate(FIRST_NAME_LENGTH);

(我知道这甚至不是相同的语义,但想保持简短。)

所以我正在寻找一种简短而优雅的方式,最好是直接替代; Java 8、Spring、Guava 甚至是纯测试库都受到欢迎。

【问题讨论】:

  • 不如围绕RandomStringGenerator构建一个包装器
  • 您在寻找哪些功能?
  • @redflar3:大多数情况下,我需要短的数字字符串或“常用”字母数字字符的短字符串。它们通常代表用户在表单中输入的值。
  • 因为 RandomStringUtils 的 3.7 版弃用已被删除;-) 请参阅 issues.apache.org/jira/browse/LANG-1346 或发布说明
  • 好!这过时了我的问题。没有按钮。一旦 3.6 版真正淘汰,我将删除该问题。

标签: java apache-commons


【解决方案1】:

我会考虑使用Facade pattern 来包装RandomStringGenerator 类的“笨拙”。

示例:

public class RandomStringUtilsFacade
{
    public static String randomAlphabetic (final int firstNameLength)
    {
        return randomAlphabetic(firstNameLength, 'a', 'z');
    }

    // If you want to use the range
    public static String randomAlphabetic (final int firstNameLength, 
                                           final char low, final char high)
    {
        return new RandomStringGenerator.Builder().withinRange(low, high).build()
        .generate(firstNameLength);
    }
}

【讨论】:

  • 当然,这是一种简单(而且很好)的解决方案,但我真的更喜欢单线。我不太明白为什么它一开始就被弃用了。
  • @MichaelPiefel 除非我误解了您的评论,否则它是单行的:String name1 = RandomStringUtilsFacade.randomAlphabetic(FIRST_NAME_LENGTH);
  • 当然是加了15行立面后的单行。 :-) 我想我最终会按照这些思路做一些事情。让我有机会添加专门的名字生成器。
  • @MichaelPiefel 很公平 - 从整体上讲,它不是单行的。好吧,祝你好运。
【解决方案2】:
return org.apache.commons.lang3.RandomStringUtils.random(24, "abcdefghijklmnopqrstuvwxyz0123456789");

这个 str 怎么样 @Michael Markidis

【讨论】:

  • 欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。见:How do I write a good answer?。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2021-12-14
  • 2021-05-11
  • 1970-01-01
相关资源
最近更新 更多