boolean checkString() { if (!isEmpty()) { // Check if the string only contains chars that are elements in the alphabet for (int i = 0; i < charArray.length; i++) { if (!WildcardStringParser.isInAlphabet(charArray[i])) { return false; } } } return true; }
protected Object clone() throws CloneNotSupportedException { if (initialized) { return new WildcardStringParser(stringMask); } return null; }
private boolean checkIfStateInWildcardRange(WildcardStringParserState pState) { WildcardStringParserState runnerState = pState; while (runnerState.previousState != null) { runnerState = runnerState.previousState; if (isFreeRangeCharacter(runnerState.character)) { return true; } if (!isFreePassCharacter(runnerState.character)) { return false; } // If free-pass char '?' - move on } return false; }
ParsableString parsableString = new ParsableString(pStringToParse); if (!parsableString.checkString()) { if (debugging) { out.println("one or more characters in string to be parsed are not legal characters - rejection!"); if (isTrivialAutomaton()) { if (debugging) { out.println("automaton represents a trivial string mask (accepts all strings) - acceptance!"); if (parsableString.isEmpty()) { if (debugging) { out.println("string to be parsed is empty and not trivial automaton - rejection!"); if ((parsableString.charArray[0] == initialState.character) || isWildcardCharacter(initialState.character)) { runnerState = initialState; parsableString.index = 0; if (isFreePassCharacter(runnerState.character)) { numberOfFreePassCharactersRead_SinceLastFreePassState++; for (int i = 0; i < parsableString.length(); i++) { if (debugging) { out.println(); + parsableString.getActiveChar() + "' char string index: " + parsableString.index + " number of chars since last free-range state: " + numberOfParsedCharactersRead_SinceLastFreePassState); if (isFreeRangeCharacter(runnerState.character)) {
newState = new WildcardStringParserState(stringMask.charAt(0)); newState.automatonStateNumber = 0; newState.previousState = null; if (checkIfLastFreeRangeState(newState)) { lastFreeRangeState = newState; if (!((isInAlphabet(activeChar)) || (isWildcardCharacter(activeChar)))) { System.err.println("one or more characters in string mask are not legal characters - aborting!"); return false; newState = new WildcardStringParserState(activeChar); newState.automatonStateNumber = i; newState.previousState = runnerState; if (checkIfLastFreeRangeState(newState)) { lastFreeRangeState = newState;
private boolean checkIfLastFreeRangeState(WildcardStringParserState pState) { if (isFreeRangeCharacter(pState.character)) { return true; } if (isFreePassCharacter(pState.character)) { if (checkIfStateInWildcardRange(pState)) { return true; } } return false; }
parser = new WildcardStringParser(mask); if (parser.parseString(pName)) { parser = new WildcardStringParser(mask); if (parser.parseString(pName)) {
protected TokenIterator createTokenIterator(String pString, String pDelimiters) { return new RegExTokenIterator(pString, pDelimiters); }
/** * Creates a wildcard string parser. * <p/> * * @param pStringMask the wildcard string mask. * @param pDebugging {@code true} will cause debug messages to be emitted. * @param pDebuggingPrintStream the {@code java.io.PrintStream} to which the debug messages will be emitted. */ public WildcardStringParser(final String pStringMask, final boolean pDebugging, final PrintStream pDebuggingPrintStream) { this.stringMask = pStringMask; this.debugging = pDebugging; this.out = pDebuggingPrintStream; initialized = buildAutomaton(); }
/** @return {@code true} if and only if the string mask only consists of free-range wildcard character(s). */ private boolean isTrivialAutomaton() { for (int i = 0; i < stringMask.length(); i++) { if (!isFreeRangeCharacter(stringMask.charAt(i))) { return false; } } return true; }
public String next() { if (!hasNext()) { throw new NoSuchElementException(); } next = false; return matcher.group(); } }
@Test public void testSingleTokenSingleDelimiter() { Iterator iterator = createTokenIterator("A", "[^,]+"); assertTrue("String has no elements", iterator.hasNext()); assertEquals("A", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); }
boolean checkString() { if (!isEmpty()) { // Check if the string only contains chars that are elements in the alphabet for (int i = 0; i < mCharArray.length; i++) { if (!WildcardStringParser.isInAlphabet(mCharArray[i])) { return false; } } } return true; }
/** Tests if a certain character is a wildcard character ('*' or '?'). */ public static boolean isWildcardCharacter(final char pCharToCheck) { return ((isFreeRangeCharacter(pCharToCheck)) || (isFreePassCharacter(pCharToCheck))); }
protected TokenIterator createTokenIterator(String pString) { return new RegExTokenIterator(pString); }
@Test public void testSingleToken() { Iterator iterator = createTokenIterator("A"); assertTrue("String has no elements", iterator.hasNext()); assertEquals("A", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); }
@Test public void testSingleSeparator() { Iterator iterator = createTokenIterator("A,B,C", "[^,]+"); assertTrue("String has no elements", iterator.hasNext()); assertEquals("A", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("B", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("C", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); }
@Test public void testSingleSeparatorDefaultDelimiter() { Iterator iterator = createTokenIterator("A B C D"); assertTrue("String has no elements", iterator.hasNext()); assertEquals("A", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("B", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("C", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("D", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); }
@Test public void testMultipleSeparatorDefaultDelimiter() { Iterator iterator = createTokenIterator("A B C\nD\t\t \nE"); assertTrue("String has no elements", iterator.hasNext()); assertEquals("A", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("B", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("C", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("D", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("E", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); }
@Test public void testMultipleSeparator() { Iterator iterator = createTokenIterator("A,B,;,C...D, ., ,E", "[^ ,.;:]+"); assertTrue("String has no elements", iterator.hasNext()); Object o = iterator.next(); assertEquals("A", o); assertTrue("String has no elements", iterator.hasNext()); assertEquals("B", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("C", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("D", iterator.next()); assertTrue("String has no elements", iterator.hasNext()); assertEquals("E", iterator.next()); assertFalse("String has more than one element", iterator.hasNext()); } }