package org.kefirsf.bb.util; import java.util.Arrays; /** * The char sequence based on existing char array. */ public final class ArrayCharSequence implements CharSequence { private final char[] text; private final int offset; private final int length; public ArrayCharSequence(char[] text, int offset, int length) { Exceptions.nullArgument("text", text); Exceptions.negativeArgument("offset", offset); Exceptions.negativeArgument("length", length); if ((offset + length) > text.length) { throw new ArrayIndexOutOfBoundsException("The breaks are wrong."); } this.text = text; this.offset = offset; this.length = length; } public int length() { return length; } public char charAt(int index) { return text[index + offset]; } public CharSequence subSequence(int start, int end) { return new ArrayCharSequence(text, start + offset, end - start); } @SuppressWarnings("NullableProblems") @Override public String toString() { return String.valueOf(text, offset, length); } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof CharSequence)) return false; CharSequence that = (CharSequence) o; if(length != that.length()){ return false; } for(int i =0; i<length; i++){ if(charAt(i)!=that.charAt(i)){ return false; } } return true; } @Override public int hashCode() { int result = Arrays.hashCode(text); result = 31 * result + offset; result = 31 * result + length; return result; } }