public static int getUnpaddedCharLength(byte[] b, int offset, int length, ColumnModifier columnModifier) { return getFirstNonBlankCharIdxFromEnd(b, offset, length, columnModifier) - offset + 1; }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { // Starting from the end of the byte, look for all single bytes at the end of the string // that is below SPACE_UTF8 (space and control characters) or above (control chars). if (!getStringExpression().evaluate(tuple, ptr)) { return false; } if (ptr.getLength() == 0) { ptr.set(ByteUtil.EMPTY_BYTE_ARRAY); return true; } byte[] string = ptr.get(); int offset = ptr.getOffset(); int length = ptr.getLength(); ColumnModifier columnModifier = getStringExpression().getColumnModifier(); int i = StringUtil.getFirstNonBlankCharIdxFromEnd(string, offset, length, columnModifier); if (i == offset - 1) { ptr.set(ByteUtil.EMPTY_BYTE_ARRAY); return true; } ptr.set(string, offset, i - offset + 1); return true; }
@Override public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) { if (!getStringExpression().evaluate(tuple, ptr)) { return false; } if (ptr.getLength() == 0) { ptr.set(ByteUtil.EMPTY_BYTE_ARRAY); return true; } byte[] string = ptr.get(); int offset = ptr.getOffset(); int length = ptr.getLength(); ColumnModifier columnModifier = getColumnModifier(); int end = StringUtil.getFirstNonBlankCharIdxFromEnd(string, offset, length, columnModifier); if (end == offset - 1) { ptr.set(ByteUtil.EMPTY_BYTE_ARRAY); return true; } int head = StringUtil.getFirstNonBlankCharIdxFromStart(string, offset, length, columnModifier); ptr.set(string, head, end - head + 1); return true; }