int (int offset) { if (offset < 0 || offset > myLength) { throw new IndexOutOfBoundsException("Wrong offset: " + offset + ". Should be in range: [0, " + myLength + "]"); } if (myLength == 0) return 0; if (offset == myLength) return getLineCount() - 1; int bsResult = Arrays.binarySearch(myStarts, offset); return bsResult >= 0 ? bsResult : -bsResult - 2; }