< prev index next >

src/java.base/share/classes/java/lang/StringUTF16.java

Print this page
rev 51519 : 8200434: String::align, String::indent
Reviewed-by: smarks

*** 857,867 **** return ((st > 0) || (len < length )) ? new String(Arrays.copyOfRange(value, st << 1, len << 1), UTF16) : null; } - public static int indexOfNonWhitespace(byte[] value) { int length = value.length >> 1; int left = 0; while (left < length) { int codepoint = codePointAt(value, left, length); --- 857,866 ----
*** 872,882 **** } return left; } public static int lastIndexOfNonWhitespace(byte[] value) { ! int length = value.length >> 1; int right = length; while (0 < right) { int codepoint = codePointBefore(value, right); if (codepoint != ' ' && codepoint != '\t' && !Character.isWhitespace(codepoint)) { break; --- 871,881 ---- } return left; } public static int lastIndexOfNonWhitespace(byte[] value) { ! int length = value.length >>> 1; int right = length; while (0 < right) { int codepoint = codePointBefore(value, right); if (codepoint != ' ' && codepoint != '\t' && !Character.isWhitespace(codepoint)) { break;
*** 885,914 **** } return right; } public static String strip(byte[] value) { ! int length = value.length >> 1; int left = indexOfNonWhitespace(value); if (left == length) { return ""; } int right = lastIndexOfNonWhitespace(value); ! return ((left > 0) || (right < length)) ? newString(value, left, right - left) : null; } public static String stripLeading(byte[] value) { ! int length = value.length >> 1; int left = indexOfNonWhitespace(value); if (left == length) { return ""; } return (left != 0) ? newString(value, left, length - left) : null; } public static String stripTrailing(byte[] value) { ! int length = value.length >> 1; int right = lastIndexOfNonWhitespace(value); if (right == 0) { return ""; } return (right != length) ? newString(value, 0, right) : null; --- 884,914 ---- } return right; } public static String strip(byte[] value) { ! int length = value.length >>> 1; int left = indexOfNonWhitespace(value); if (left == length) { return ""; } int right = lastIndexOfNonWhitespace(value); ! boolean ifChanged = (left > 0) || (right < length); ! return ifChanged ? newString(value, left, right - left) : null; } public static String stripLeading(byte[] value) { ! int length = value.length >>> 1; int left = indexOfNonWhitespace(value); if (left == length) { return ""; } return (left != 0) ? newString(value, left, length - left) : null; } public static String stripTrailing(byte[] value) { ! int length = value.length >>> 1; int right = lastIndexOfNonWhitespace(value); if (right == 0) { return ""; } return (right != length) ? newString(value, 0, right) : null;
*** 917,931 **** private final static class LinesSpliterator implements Spliterator<String> { private byte[] value; private int index; // current index, modified on advance/split private final int fence; // one past last index ! LinesSpliterator(byte[] value) { ! this(value, 0, value.length >>> 1); ! } ! ! LinesSpliterator(byte[] value, int start, int length) { this.value = value; this.index = start; this.fence = start + length; } --- 917,927 ---- private final static class LinesSpliterator implements Spliterator<String> { private byte[] value; private int index; // current index, modified on advance/split private final int fence; // one past last index ! private LinesSpliterator(byte[] value, int start, int length) { this.value = value; this.index = start; this.fence = start + length; }
*** 1000,1013 **** @Override public int characteristics() { return Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL; } } ! static Stream<String> lines(byte[] value) { ! return StreamSupport.stream(new LinesSpliterator(value), false); } private static void putChars(byte[] val, int index, char[] str, int off, int end) { while (off < end) { putChar(val, index++, str[off++]); --- 996,1079 ---- @Override public int characteristics() { return Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL; } + + static LinesSpliterator spliterator(byte[] value) { + return new LinesSpliterator(value, 0, value.length >>> 1); + } + + static LinesSpliterator spliterator(byte[] value, int leading, int trailing) { + int length = value.length >>> 1; + int left = 0; + int index; + for (int l = 0; l < leading; l++) { + index = skipBlankForward(value, left, length); + if (index == left) { + break; + } + left = index; + } + int right = length; + for (int t = 0; t < trailing; t++) { + index = skipBlankBackward(value, left, right); + if (index == right) { + break; + } + right = index; + } + return new LinesSpliterator(value, left, right - left); } ! private static int skipBlankForward(byte[] value, int start, int length) { ! int index = start; ! while (index < length) { ! char ch = getChar(value, index++); ! if (ch == '\n') { ! return index; ! } ! if (ch == '\r') { ! if (index < length && getChar(value, index) == '\n') { ! return index + 1; ! } ! return index; ! } ! if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { ! return start; ! } ! } ! return length; ! } ! ! private static int skipBlankBackward(byte[] value, int start, int fence) { ! int index = fence; ! if (start < index && getChar(value, index - 1) == '\n') { ! index--; ! } ! if (start < index && getChar(value, index - 1) == '\r') { ! index--; ! } ! while (start < index) { ! char ch = getChar(value, --index); ! if (ch == '\r' || ch == '\n') { ! return index + 1; ! } ! if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { ! return fence; ! } ! } ! return start; ! } ! } ! ! static Stream<String> lines(byte[] value, int leading, int trailing) { ! if (leading == 0 && trailing == 0) { ! return StreamSupport.stream(LinesSpliterator.spliterator(value), false); ! } else { ! return StreamSupport.stream(LinesSpliterator.spliterator(value, leading, trailing), false); ! } } private static void putChars(byte[] val, int index, char[] str, int off, int end) { while (off < end) { putChar(val, index++, str[off++]);
< prev index next >