< prev index next >

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

Print this page

        

*** 730,743 **** } static LinesSpliterator spliterator(byte[] value) { return new LinesSpliterator(value, 0, value.length); } } ! static Stream<String> lines(byte[] value) { ! return StreamSupport.stream(LinesSpliterator.spliterator(value), false); } public static void putChar(byte[] val, int index, int c) { //assert (canEncode(c)); val[index] = (byte)(c); --- 730,809 ---- } static LinesSpliterator spliterator(byte[] value) { return new LinesSpliterator(value, 0, value.length); } + + static LinesSpliterator spliterator(byte[] value, int leading, int trailing) { + int length = value.length; + 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); ! } } public static void putChar(byte[] val, int index, int c) { //assert (canEncode(c)); val[index] = (byte)(c);
< prev index next >