if (remainder >= 4 && str.charAt(pos) == '^' && str.charAt(pos + 2) == '-') { set.add(CharRange.isNotIn(str.charAt(pos + 1), str.charAt(pos + 3))); pos += 4; } else if (remainder >= 3 && str.charAt(pos + 1) == '-') { set.add(CharRange.isIn(str.charAt(pos), str.charAt(pos + 2))); pos += 3; } else if (remainder >= 2 && str.charAt(pos) == '^') { set.add(CharRange.isNot(str.charAt(pos + 1))); pos += 2; } else { set.add(CharRange.is(str.charAt(pos))); pos += 1;
@Test public void testHashCode() { final CharRange rangea = CharRange.is('a'); final CharRange rangeae = CharRange.isIn('a', 'e'); final CharRange rangenotbf = CharRange.isIn('b', 'f'); assertTrue(rangea.hashCode() == rangea.hashCode()); assertTrue(rangea.hashCode() == CharRange.is('a').hashCode()); assertTrue(rangeae.hashCode() == rangeae.hashCode()); assertTrue(rangeae.hashCode() == CharRange.isIn('a', 'e').hashCode()); assertTrue(rangenotbf.hashCode() == rangenotbf.hashCode()); assertTrue(rangenotbf.hashCode() == CharRange.isIn('b', 'f').hashCode()); assertFalse(rangea.hashCode() == rangeae.hashCode()); assertFalse(rangea.hashCode() == rangenotbf.hashCode()); assertFalse(rangeae.hashCode() == rangea.hashCode()); assertFalse(rangeae.hashCode() == rangenotbf.hashCode()); assertFalse(rangenotbf.hashCode() == rangea.hashCode()); assertFalse(rangenotbf.hashCode() == rangeae.hashCode()); }
@Test public void testSerialization() { CharRange range = CharRange.is('a'); assertEquals(range, SerializationUtils.clone(range)); range = CharRange.isIn('a', 'e'); assertEquals(range, SerializationUtils.clone(range)); range = CharRange.isNotIn('a', 'e'); assertEquals(range, SerializationUtils.clone(range)); }
array = set.getCharRanges(); assertEquals(3, array.length); assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); assertTrue(ArrayUtils.contains(array, CharRange.is('b'))); assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); assertTrue(ArrayUtils.contains(array, CharRange.is('b'))); assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); assertTrue(ArrayUtils.contains(array, CharRange.is('d'))); assertTrue(ArrayUtils.contains(array, CharRange.is('b'))); assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); assertTrue(ArrayUtils.contains(array, CharRange.isNot('b'))); assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('a', 'c'))); assertTrue(ArrayUtils.contains(array, CharRange.isNot('z'))); assertTrue(ArrayUtils.contains(array, CharRange.is('b')));
/** * <p>Constructs a {@code CharRange} over a single character.</p> * * @param ch only character in this range * @return the new CharRange object * @see CharRange#CharRange(char, char, boolean) * @since 2.5 */ public static CharRange is(final char ch) { return new CharRange(ch, ch, false); }
@Test public void testEquals_Object() { final CharRange rangea = CharRange.is('a'); final CharRange rangeae = CharRange.isIn('a', 'e'); final CharRange rangenotbf = CharRange.isIn('b', 'f'); assertFalse(rangea.equals(null)); assertTrue(rangea.equals(rangea)); assertTrue(rangea.equals(CharRange.is('a'))); assertTrue(rangeae.equals(rangeae)); assertTrue(rangeae.equals(CharRange.isIn('a', 'e'))); assertTrue(rangenotbf.equals(rangenotbf)); assertTrue(rangenotbf.equals(CharRange.isIn('b', 'f'))); assertFalse(rangea.equals(rangeae)); assertFalse(rangea.equals(rangenotbf)); assertFalse(rangeae.equals(rangea)); assertFalse(rangeae.equals(rangenotbf)); assertFalse(rangenotbf.equals(rangea)); assertFalse(rangenotbf.equals(rangeae)); }
array = set.getCharRanges(); assertEquals(3, array.length); assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); assertTrue(ArrayUtils.contains(array, CharRange.is('b'))); assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'c'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f'))); assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f'))); assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f'))); assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('e', 'f'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('m', 'p'))); assertTrue(ArrayUtils.contains(array, CharRange.is('z')));
/** * <p>Does the {@code CharSet} contain the specified * character {@code ch}.</p> * * @param ch the character to check for * @return {@code true} if the set contains the characters */ public boolean contains(final char ch) { for (final CharRange range : set) { if (range.contains(ch)) { return true; } } return false; }
/** * <p>Gets a string representation of the character range.</p> * * @return string representation of this range */ @Override public String toString() { if (iToString == null) { final StringBuilder buf = new StringBuilder(4); if (isNegated()) { buf.append('^'); } buf.append(start); if (start != end) { buf.append('-'); buf.append(end); } iToString = buf.toString(); } return iToString; }
@Test public void testStatics() { CharRange[] array; array = CharSet.EMPTY.getCharRanges(); assertEquals(0, array.length); array = CharSet.ASCII_ALPHA.getCharRanges(); assertEquals(2, array.length); assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'z'))); assertTrue(ArrayUtils.contains(array, CharRange.isIn('A', 'Z'))); array = CharSet.ASCII_ALPHA_LOWER.getCharRanges(); assertEquals(1, array.length); assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', 'z'))); array = CharSet.ASCII_ALPHA_UPPER.getCharRanges(); assertEquals(1, array.length); assertTrue(ArrayUtils.contains(array, CharRange.isIn('A', 'Z'))); array = CharSet.ASCII_NUMERIC.getCharRanges(); assertEquals(1, array.length); assertTrue(ArrayUtils.contains(array, CharRange.isIn('0', '9'))); }
assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', '^'))); // "a-^" assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); // "c" assertFalse(set.contains('b')); assertTrue(set.contains('^')); assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('a', '^'))); // "^a-^" assertTrue(ArrayUtils.contains(array, CharRange.is('c'))); // "c" assertTrue(set.contains('b')); assertFalse(set.contains('^')); assertTrue(ArrayUtils.contains(array, CharRange.isIn('a', ' '))); // "a- " assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('-', ' '))); // "^-- " assertTrue(set.contains('#')); assertTrue(set.contains('^')); assertTrue(ArrayUtils.contains(array, CharRange.isIn('^','b'))); // "^-b" assertTrue(set.contains('b')); assertTrue(set.contains('_')); // between ^ and a assertTrue(ArrayUtils.contains(array, CharRange.isIn('^','b'))); // "b-^" assertTrue(set.contains('b')); assertTrue(set.contains('^'));
array = set.getCharRanges(); assertEquals(1, array.length); assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^" assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^" assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^" assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^" assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^" x2 assertTrue(ArrayUtils.contains(array, CharRange.is('a'))); // "a" assertTrue(ArrayUtils.contains(array, CharRange.is('^'))); // "^" assertTrue(ArrayUtils.contains(array, CharRange.isNot('a'))); // "^a" assertTrue(ArrayUtils.contains(array, CharRange.is('-'))); // "-" assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('^', 'c'))); // "^^-c" assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('c', '^'))); // "^c-^" assertTrue(ArrayUtils.contains(array, CharRange.isNotIn('c', '^'))); // "^c-^" assertTrue(ArrayUtils.contains(array, CharRange.is('d'))); // "d" assertTrue(ArrayUtils.contains(array, CharRange.isNot('^'))); // "^^" assertTrue(ArrayUtils.contains(array, CharRange.is('-'))); // "-"
/** * <p>Constructs a {@code CharRange} over a set of characters.</p> * * @param start first character, inclusive, in this range * @param end last character, inclusive, in this range * @return the new CharRange object * @see CharRange#CharRange(char, char, boolean) * @since 2.5 */ public static CharRange isIn(final char start, final char end) { return new CharRange(start, end, false); }