From 1d781ea74f105da7a4c9822ffb3d949cbf56f387 Mon Sep 17 00:00:00 2001 From: Marian Dvorsky Date: Mon, 27 Nov 2017 18:19:48 +0100 Subject: [PATCH] Improve implementation of nexmark.StringsGenerator.nextExactString() --- .../sources/generator/model/StringsGenerator.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sdks/java/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/model/StringsGenerator.java b/sdks/java/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/model/StringsGenerator.java index c80856003744..a79ea687a480 100644 --- a/sdks/java/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/model/StringsGenerator.java +++ b/sdks/java/nexmark/src/main/java/org/apache/beam/sdk/nexmark/sources/generator/model/StringsGenerator.java @@ -45,8 +45,16 @@ public static String nextString(Random random, int maxLength) { /** Return a random string of exactly {@code length}. */ public static String nextExactString(Random random, int length) { StringBuilder sb = new StringBuilder(); + int rnd = 0; + int n = 0; // number of random characters left in rnd while (length-- > 0) { - sb.append((char) ('a' + random.nextInt(26))); + if (n == 0) { + rnd = random.nextInt(); + n = 6; // log_26(2^31) + } + sb.append((char) ('a' + rnd % 26)); + rnd /= 26; + n--; } return sb.toString(); }