private SubSequence(SubSequence subSequence, int start, int end) { assert start > 0 || end < subSequence.length(); base = subSequence; baseSeq = subSequence.baseSeq; startOffset = subSequence.startOffset + start; endOffset = subSequence.startOffset + end; }
@Override public char charAt(int index) { if (index >= 0 && index < endOffset - startOffset) { char c = baseSeq.charAt(index + startOffset); return c == '\0' ? '\uFFFD' : c; } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + index + " out of range: 0, " + length()); }
@Override public SubSequence baseSubSequence(int start, int end) { if (start >= 0 && end <= base.length()) { return start == startOffset && end == endOffset ? this : base != this ? base.baseSubSequence(start, end) : new SubSequence(this, start, end); } if (start < 0 || start > base.length()) { throw new StringIndexOutOfBoundsException("SubCharSequence index: " + start + " out of range: 0, " + length()); } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + end + " out of range: 0, " + length()); }
@Override public int getIndexOffset(int index) { if (index >= 0 && index <= endOffset - startOffset) { return startOffset + index; } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + index + " out of range: 0, " + length()); }
@Override public SubSequence subSequence(final int start) { return subSequence(start, length()); }
@Override public SubSequence subSequence(int start, int end) { if (start >= 0 && end <= endOffset - startOffset) { return baseSubSequence(startOffset + start, startOffset + end); } if (start < 0 || startOffset + start > endOffset) { throw new StringIndexOutOfBoundsException("SubCharSequence index: " + start + " out of range: 0, " + length()); } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + end + " out of range: 0, " + length()); }
private SubSequence(SubSequence subSequence, int start, int end) { assert start > 0 || end < subSequence.length(); base = subSequence; baseSeq = subSequence.baseSeq; startOffset = subSequence.startOffset + start; endOffset = subSequence.startOffset + end; }
@Override public char charAt(int index) { if (index >= 0 && index < endOffset - startOffset) { char c = baseSeq.charAt(index + startOffset); return c == '\0' ? '\uFFFD' : c; } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + index + " out of range: 0, " + length()); }
@Override public int getIndexOffset(int index) { if (index >= 0 && index <= endOffset - startOffset) { return startOffset + index; } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + index + " out of range: 0, " + length()); }
@Override public SubSequence baseSubSequence(int start, int end) { if (start >= 0 && end <= base.length()) { return start == startOffset && end == endOffset ? this : base != this ? base.baseSubSequence(start, end) : new SubSequence(this, start, end); } if (start < 0 || start > base.length()) { throw new StringIndexOutOfBoundsException("SubCharSequence index: " + start + " out of range: 0, " + length()); } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + end + " out of range: 0, " + length()); }
@Override public SubSequence subSequence(final int start) { return subSequence(start, length()); }
@Override public SubSequence subSequence(int start, int end) { if (start >= 0 && end <= endOffset - startOffset) { return baseSubSequence(startOffset + start, startOffset + end); } if (start < 0 || startOffset + start > endOffset) { throw new StringIndexOutOfBoundsException("SubCharSequence index: " + start + " out of range: 0, " + length()); } throw new StringIndexOutOfBoundsException("SubCharSequence index: " + end + " out of range: 0, " + length()); }