Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: Andreas Leitgeb Newsgroups: comp.lang.java.programmer Subject: "less for more" - a little story about String.split Date: Fri, 27 Jul 2018 06:33:17 -0000 (UTC) Organization: A noiseless patient Spider Lines: 42 Message-ID: Reply-To: avl@logic.at Injection-Date: Fri, 27 Jul 2018 06:33:17 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="5295f40de57ce479d6013086eade12c9"; logging-data="25056"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19HBdsoECnhGxP9Uv9z+KPw" User-Agent: slrn/1.0.3 (Linux) Cancel-Lock: sha1:yRh7o2fvKTqc+BLfW5qUIN5DqIY= Xref: csiph.com comp.lang.java.programmer:38499 Imagine you have a variable named "text" of type String, and then you have this line of code: String lines[] = text.split( "\n" ); If text originally pointed to an empty string, then you get an array of length 1, holding an empty string. If, however, you append a certain char to that string, then you may end up with a zero-length array returned from split! Namely, if ... (*** drum roll ***) ...the char you added matches split's delimiter: text.equals("\n"). The javadoc of String.split gives these clues about array length in the case of a 0 limit: We have clue #1a: " The array returned by this method contains each substring of this " string that is terminated by another substring that matches the given " expression *or is terminated by the end of the string*. [my emphasis] [this essentially describes the effect of split with a negative limit] We have clue #1b: " If the expression does not match any part of the input then the " resulting array has just one element, namely this string. [This is just a corollary of #1a for the case of no matches.] and we have clue #2: " If n is zero then the pattern will be applied as many times as " possible, the array can have any length, " *and trailing empty strings will be discarded*. [again my emphasis] Which overrides #1a but not #1b. Could anyone explain to me, why emphasiszed part of clue #2 only applies to a String that contains at least one delimiter? Why is clue #2 weaker than clue #1b but stronger than clue #1a ? Who else ever had a bug from wrongly assuming that split would always return an array of length at least 1, or maybe the other way: expecting 0-length arrays for splitting the empty string with a limit 0?