विल्फ्रेड स्प्रिंगर के समाधान के आधार पर http://www.brics.dk/~amoeller/automaton/ के साथ मैं एक और जनरेटर बनाता हूं। यह रिकर्सन का उपयोग नहीं करता है। यह इनपुट/पटर/नियमित एक्सप्रेशन न्यूनतम स्ट्रिंग लंबाई और अधिकतम स्ट्रिंग लंबाई इनपुट के रूप में लेते हैं। परिणाम न्यूनतम और अधिकतम लंबाई के बीच एक स्वीकृत स्ट्रिंग है। यह कुछ एक्सएमएल "शॉर्ट हैंड कैरेक्टर क्लासेस" को भी अनुमति देता है। मैं इसे एक्सएमएल नमूना जेनरेटर के लिए उपयोग करता हूं जो पहलुओं के लिए वैध स्ट्रिंग बनाता है।
public static final String generate(final String pattern, final int minLength, final int maxLength) {
final String regex = pattern
.replace("\\d", "[0-9]") // Used d=Digit
.replace("\\w", "[A-Za-z0-9_]") // Used d=Word
.replace("\\s", "[ \t\r\n]"); // Used s="White"Space
final Automaton automaton = new RegExp(regex).toAutomaton();
final Random random = new Random(System.nanoTime());
final List<String> validLength = new LinkedList<>();
int len = 0;
final StringBuilder builder = new StringBuilder();
State state = automaton.getInitialState();
Transition[] transitions;
while(len <= maxLength && (transitions = state.getSortedTransitionArray(true)).length != 0) {
final int option = random.nextInt(transitions.length);
if (state.isAccept() && len >= minLength && len <= maxLength) validLength.add(builder.toString());
final Transition t = transitions[option]; // random transition
builder.append((char) (t.getMin()+random.nextInt(t.getMax()-t.getMin()+1))); len ++;
state = t.getDest();
}
if(validLength.size() == 0) throw new IllegalArgumentException(automaton.toString()+" , "+minLength+" , "+maxLength);
return validLength.get(random.nextInt(validLength.size()));
}
कूल विचार - परिणाम सुनने में रुचि रखते हैं। – Ryall
यह वास्तव में काफी उपयोगी होगा! – p3t0r
मुझे लगता है कि किसी भी "... या अधिक" चयनकर्ताओं को सीमित होना होगा या आप 1,000,000 वर्ण शब्दों के साथ समाप्त हो सकते हैं: एस – Ryall