< prev index next >

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

Print this page
rev 54939 : 8223775: String::stripIndent (Preview)


 730                 int start = index;
 731                 index = mid;
 732                 return new LinesSpliterator(value, start, mid - start);
 733             }
 734             return null;
 735         }
 736 
 737         @Override
 738         public long estimateSize() {
 739             return fence - index + 1;
 740         }
 741 
 742         @Override
 743         public int characteristics() {
 744             return Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL;
 745         }
 746 
 747         static LinesSpliterator spliterator(byte[] value) {
 748             return new LinesSpliterator(value, 0, value.length);
 749         }
 750 
 751         static LinesSpliterator spliterator(byte[] value, int leading, int trailing) {
 752             int length = value.length;
 753             int left = 0;
 754             int index;
 755             for (int l = 0; l < leading; l++) {
 756                 index = skipBlankForward(value, left, length);
 757                 if (index == left) {
 758                     break;
 759                 }
 760                 left = index;
 761             }
 762             int right = length;
 763             for (int t = 0; t < trailing; t++) {
 764                 index = skipBlankBackward(value, left, right);
 765                 if (index == right) {
 766                     break;
 767                 }
 768                 right = index;
 769             }
 770             return new LinesSpliterator(value, left, right - left);
 771         }
 772 
 773         private static int skipBlankForward(byte[] value, int start, int length) {
 774             int index = start;
 775             while (index < length) {
 776                 char ch = getChar(value, index++);
 777                 if (ch == '\n') {
 778                     return index;
 779                 }
 780                 if (ch == '\r') {
 781                     if (index < length && getChar(value, index) == '\n') {
 782                         return index + 1;
 783                     }
 784                     return index;
 785                 }
 786                 if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) {
 787                     return start;
 788                 }
 789             }
 790             return length;
 791         }
 792 
 793         private static int skipBlankBackward(byte[] value, int start, int fence) {
 794             int index = fence;
 795             if (start < index && getChar(value, index - 1) == '\n') {
 796                 index--;
 797             }
 798             if (start < index && getChar(value, index - 1) == '\r') {
 799                 index--;
 800             }
 801             while (start < index) {
 802                 char ch = getChar(value, --index);
 803                 if (ch == '\r' || ch == '\n') {
 804                     return index + 1;
 805                 }
 806                 if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) {
 807                     return fence;
 808                 }
 809             }
 810             return start;
 811         }
 812     }
 813 
 814     static Stream<String> lines(byte[] value, int leading, int trailing) {
 815         if (leading == 0 && trailing == 0) {
 816             return StreamSupport.stream(LinesSpliterator.spliterator(value), false);
 817         } else {
 818             return StreamSupport.stream(LinesSpliterator.spliterator(value, leading, trailing), false);
 819         }
 820     }
 821 
 822     public static void putChar(byte[] val, int index, int c) {
 823         //assert (canEncode(c));
 824         val[index] = (byte)(c);
 825     }
 826 
 827     public static char getChar(byte[] val, int index) {
 828         return (char)(val[index] & 0xff);
 829     }
 830 
 831     public static byte[] toBytes(int[] val, int off, int len) {
 832         byte[] ret = new byte[len];
 833         for (int i = 0; i < len; i++) {
 834             int cp = val[off++];
 835             if (!canEncode(cp)) {
 836                 return null;
 837             }
 838             ret[i] = (byte)cp;
 839         }




 730                 int start = index;
 731                 index = mid;
 732                 return new LinesSpliterator(value, start, mid - start);
 733             }
 734             return null;
 735         }
 736 
 737         @Override
 738         public long estimateSize() {
 739             return fence - index + 1;
 740         }
 741 
 742         @Override
 743         public int characteristics() {
 744             return Spliterator.ORDERED | Spliterator.IMMUTABLE | Spliterator.NONNULL;
 745         }
 746 
 747         static LinesSpliterator spliterator(byte[] value) {
 748             return new LinesSpliterator(value, 0, value.length);
 749         }





















 750     }
 751 
 752     static Stream<String> lines(byte[] value) {










































 753         return StreamSupport.stream(LinesSpliterator.spliterator(value), false);



 754     }
 755 
 756     public static void putChar(byte[] val, int index, int c) {
 757         //assert (canEncode(c));
 758         val[index] = (byte)(c);
 759     }
 760 
 761     public static char getChar(byte[] val, int index) {
 762         return (char)(val[index] & 0xff);
 763     }
 764 
 765     public static byte[] toBytes(int[] val, int off, int len) {
 766         byte[] ret = new byte[len];
 767         for (int i = 0; i < len; i++) {
 768             int cp = val[off++];
 769             if (!canEncode(cp)) {
 770                 return null;
 771             }
 772             ret[i] = (byte)cp;
 773         }


< prev index next >