使用仿造者生成Java姓氏,但仅需字母

问题描述 投票:0回答:2

在我们的测试中需要使用一些名称生成器,因此我们使用了:

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
</dependency>

Faker faker = new Faker();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName();

工作原理非常清晰。但是有时我们会失败,因为姓氏中生成了',例如O'KeefeD'Amore。要求是不要在那里使用'。为了解决这个问题,在使用faker实例(如下一个实例)之前,我已经使用了一些表达式:

faker.expression("[A-Za-z]+");

...以及其他(#{regexify '(A-Za-z)'}#{regexify '[A-Za-z]+'} ...),但这无济于事。 (我仍然可以检测到姓氏中的'。)

是否有解决此问题的想法?

java expression faker
2个回答
0
投票

可以通过表达式replaceAll使用[^A-Za-z]以仅允许字母字符:

Faker faker = new Faker();
String firstName = faker.name().firstName();
String lastName = faker.name().lastName().replaceAll("[^A-Za-z]", "");

0
投票

Faker有一堆yml文件,这些文件具有最流行的名称/姓氏等。支持一堆语言环境。解决问题的方法是为自定义区域设置提供自定义文件。

Faker faker = new Faker(new Locale("en","TEST"));

自定义文件示例(en-TEST.yml):

en-TEST:
  faker:
    name:
      name:
        - "#{first_name} #{last_name}"
      first_name: [
                    Adedayo
                  ]
      last_name: [
                    Tella
                  ]

因此您可以从默认文件(last_name locale)复制en值,并删除所有您不喜欢的内容。 Faker将拾取自定义文件,并将其用于随机生成。

ps.s。作为一种选择,您可以只浏览现有文件,然后找到一个没有错误姓氏的文件(en-NG似乎可以满足您的需求)。但是,不能保证新版本的faker会保留相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.