package com.googlecode.totallylazy.segments; import com.googlecode.totallylazy.Segment; import java.util.NoSuchElementException; public class CharacterSegment extends AbstractSegment<Character> { private final CharSequence charSequence; private final int offset; private CharacterSegment(CharSequence charSequence, int offset) { this.charSequence = charSequence; this.offset = offset; } public static Segment<Character> characterSegment(CharSequence charSequence) { return new CharacterSegment(charSequence, 0); } @Override public boolean isEmpty() { return charSequence.length() <= offset; } @Override public Character head() throws NoSuchElementException { if (isEmpty()) { throw new NoSuchElementException(); } return charSequence.charAt(offset); } @Override public Segment<Character> tail() throws NoSuchElementException { if (isEmpty()) throw new NoSuchElementException(); return new CharacterSegment(charSequence, offset + 1); } @Override public String toString() { return charSequence.subSequence(offset, charSequence.length()).toString(); } @Override public int hashCode() { return toString().hashCode(); } @Override public boolean equals(Object obj) { return obj instanceof Segment && toString().equals(obj.toString()); } }