[
https://issues.apache.org/jira/browse/TEXT-34?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15763499#comment-15763499
]
Duncan Jones commented on TEXT-34:
----------------------------------
{quote}
I'd suggest adding more methods like {{withRange(char, char)}}
{quote}
I really like that syntax. I think I might remove {{withMinimum/Maximum}} in
favour of {{withinRange(int, int)}}. It also avoids the issue of deferring the
{{min <= max}} check until {{build()}} is called.
{quote}
... {{withDigits()}} or {{withLetter()}} to make common cases easier.
{quote}
Did you notice the fields I defined? It means you can do:
{code:java}
import static org.apache.commons.text.RandomStringBuilder.DIGIT_PREDICATE;
...
String str = new
RandomStringBuilder().ofLength(5000).filteredBy(DIGIT_PREDICATE).build();
{code}
{quote}
Regarding the filter, I wonder if it would be worth making the pending string
accessible to the test method. A test could thus be based on the previous
characters, and it would be possible to write a test avoiding the repetitions
characters.
{quote}
Nothing prevents a custom filter from saving the characters seen so far:
{code:java}
CodePointPredicate uniqueFilter = new CodePointPredicate() {
private final Set<Integer> seen = new HashSet<>();
@Override
public boolean test(int codePoint) {
return seen.add(Integer.valueOf(codePoint));
}
};
String str = new
RandomStringBuilder().ofLength(26).withMinimum('A').withMaximum('Z')
.filteredBy(uniqueFilter)
.build();
System.out.println(str);
{code}
(Note: building this example showed me that I've messed up the random number
generation, so I'll add a test to catch that and will fix it in the pull
request)
If we think accessing the previous string is a common enough occurrence, we
could update {{CodePointPredicate}} so that it's passed an object representing
the current state of the string, allowing for queries. In your specific
example, I'm not sure that makes the code any better, since you would need to
repeatedly scan the string for each new character.
> Add class to generate random strings
> ------------------------------------
>
> Key: TEXT-34
> URL: https://issues.apache.org/jira/browse/TEXT-34
> Project: Commons Text
> Issue Type: New Feature
> Reporter: Duncan Jones
> Assignee: Duncan Jones
>
> The {{RandomStringUtils}} class will be deprecated in Commons Lang and reborn
> in Commons Text.
> Because the original class has some complicated parameters and potentially
> unnecessary capabilities, I'll simplify as I move it across. I'll also ensure
> the class plays nicely with Unicode characters.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)