рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЬрд╛рд╡рд╛ 11 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рд╕реЗ, рдПрдХ рджрд┐рди рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдЕрдм рд░рд┐рд▓реАрдЬрд╝ рдХреА рдкрд╣рд▓реА рд╕рдореАрдХреНрд╖рд╛ рдкрд╣рд▓реЗ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреА рд╣реИред рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдЬреНрдЮрдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рд╕реЗ рд▓реЗрдЦ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХреЗ рдзреНрдпрд╛рди рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм
рд╕реЗ 11 рд╡реАрдВ рдЬрд╛рд╡рд╛ рдХреЗ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (I, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реА)ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдореЗрдВ
рдЬреНрдЮрд╛рдд рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рд╣рдо рдХрдИ рдХреЛ
"@ рд╕рд┐рдВрд╕ 11" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рд╛рдБ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╡реЗ рдХрд▓ рд╣реА рдЬрд╛рд╡рд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдПред
рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрджреЗрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрд┐рд╕реА рдХреЗ рдХрд╛рдо рдЖ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦ рдЫреЛрдЯрд╛ рдерд╛, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдУрд░реЗрдХрд▓ рдХреА рдЧрд▓рддреА рднреА рд╣реИ - рдЙрдиреНрд╣реЛрдВрдиреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХреЗрд╡рд▓ 4 (+2) рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкрдЯреНрдЯреА ();
рдпрд╣ рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рдЧреИрд░-рд╕реНрдерд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдХреЗ рдмрд╛рдж рд╕рднреА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
String withSpaces = " a "; String withoutSpaces = withSpaces.strip(); String OUTPUT_TEMPLATE = "<%s>" System.out.println(String.format(OUTPUT_TEMPLATE, withSpaces)); System.out.println(String.format(OUTPUT_TEMPLATE, withoutSpaces));
рдкрд░рд┐рдгрд╛рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛:
original: < a > strip: <a>
рд╕реНрдЯреНрд░рд┐рдк () рд╡рд┐рдзрд┐ рдореЗрдВ рджреЛ рдЪрдЪреЗрд░реЗ рднрд╛рдИ рд╣реИрдВ - рд╕реНрдЯреНрд░рд┐рдкрд▓реЗрдбрд┐рдВрдЧ () рдФрд░ рд╕реНрдЯреНрд░рд┐рдкрдЯреНрд░рд┐рд▓рд┐рдВрдЧ ()ред рдкрд╣рд▓рд╛ - рдкрд╣рд▓реЗ рдЧреИрд░-рд╕реНрдерд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╣реА рдкреАрдЫреЗ рд╣реИред
String leading = withSpaces.stripLeading(); String trailing = withSpaces.stripTrailing();
рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
stripLeading: <a > stripTrailing: < a>
рдпреБрдкреАрдбреАред
рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдЦ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рд╣реА рдЯреНрд░рд┐рдо () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ, рдЬреЛ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡рд╣реА рдХрд░рддрд╛ рд╣реИред
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрднреЗрдж рд╣реИрдВред
public static String trim(byte[] value) { int len = value.length; int st = 0; while ((st < len) && ((value[st] & 0xff) <= ' ')) { st++; } while ((st < len) && ((value[len - 1] & 0xff) <= ' ')) { len--; } return ((st > 0) || (len < value.length)) ? newString(value, st, len - st) : null; }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рджреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ рдЧреИрд░-рд╕реНрдерд╛рди рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдВрддрд┐рдо рдЧреИрд░-рд╕реНрдерд╛рди рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдлрд┐рд░ рдПрдХ рдирдИ рд░реЗрдЦрд╛ рдХрд╛рдЯ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рдмрд╕ рдЕрдВрддрд░рд╛рд▓ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдЕрдм рдкрдЯреНрдЯреА () рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред
public static String strip(byte[] value) { int left = indexOfNonWhitespace(value); if (left == value.length) { return ""; } int right = lastIndexOfNonWhitespace(value); return ((left > 0) || (right < value.length)) ? newString(value, left, right - left) : null; } public static int indexOfNonWhitespace(byte[] value) { int length = value.length; int left = 0; while (left < length) { char ch = (char)(value[left] & 0xff); if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { break; } left++; } return left; } public static int lastIndexOfNonWhitespace(byte[] value) { int length = value.length; int right = length; while (0 < right) { char ch = (char)(value[right - 1] & 0xff); if (ch != ' ' && ch != '\t' && !Character.isWhitespace(ch)) { break; } right--; } return right; }
рдирдИ рд╡рд┐рдзрд┐ рдЖрдо рддреМрд░ рдкрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдЬрдм рдкреНрд░рддреАрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдХ рд╕реНрдерд╛рди, рдЯреИрдм, рдЖрджрд┐ рд╣реЛред (рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЖрдЗрд╕рд╡рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдИ рд╡рд┐рдзрд┐ рдмреЗрд╣рддрд░ рд╣реИ рдпрджрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдЕрджреГрд╢реНрдп рдкрд╛рддреНрд░реЛрдВ рдореЗрдВред
isBlank ();
рд╡рд┐рдзрд┐ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЪрд╛рд╣реЗ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рд░рд┐рдХреНрдд" рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рдЯреИрдм рдФрд░ рдЕрдиреНрдп рдЕрджреГрд╢реНрдп рд╡рд░реНрдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдИ рд╡рд░реНрдг рди рд╣реЛред
рдпрджрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
String blank = " "; Boolean isBlank = blank.isBlank();
рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
true
рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ - рд▓реИрдЯрд┐рди рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ UTF-16 рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред
public boolean isBlank() { return indexOfNonWhitespace() == length(); } private int indexOfNonWhitespace() { if (isLatin1()) { return StringLatin1.indexOfNonWhitespace(value); } else { return StringUTF16.indexOfNonWhitespace(value); } }
рджреЛрд╣рд░рд╛рдирд╛ ();
рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдЪрд▓рд╛рдХрд░:
String sample = "(^_^) "; String multiple = sample.repeat(10);
рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ:
(^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^)
рдпрджрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдг рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
String blank = sample.repeat(0);
рдкрд░рд┐рдгрд╛рдо:
length: 0
рд▓рд╛рдЗрдиреЗрдВ ();
рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдУрд░реЗрдХрд▓ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ред
рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╡рд┐рдзрд┐ рд▓рд╛рдЗрди рдХреЗ рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
String lines = "Blind Text Generator is a useful tool\n" + "which provides Lorem Ipsum and a number of alternatives.\n" + "The number of characters, words, and paragraphs\n" + "are easily controlled and you can set \n" + "the font to appreciate how it'll look in your design."; lines .lines() .map(l -> "next line: " + l) .forEach(System.out::println);
рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
next line: Blind Text Generator is a useful tool next line: which provides Lorem Ipsum and a number of alternatives. next line: The number of characters, words, and paragraphs next line: are easily controlled and you can set next line: the font to appreciate how it'll look in your design.
рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдзрд╛рд░рд╛ рдорд┐рд▓реА, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЧрд░реНрдордЬреЛрд╢реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рд╕реНрдкреНрд▓рд┐рдЯрд░реНрд╕ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public Stream<String> lines() { return isLatin1() ? StringLatin1.lines(value) : StringUTF16.lines(value); }
рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднрд╛рдЧ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд░ рдФрд░ рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЖрдк
рдЬреАрдердм рдкрд░ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╕рднреА рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЦреБрдж рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
ред