static S extractLastNLinesOfString(int n, S s) { int i = l(s)-1; // skip trailing new line if (i >= 0 && s.charAt(i) == '\n') --i; if (i >= 0 && s.charAt(i) == '\r') --i; while (n > 0 && i >= 0) if (s.charAt(i) == '\n') { if (--n == 0) break; } else --i; ret substring(s, i); } static S extractLastNLinesOfString(S s, int n) { ret extractLastNLinesOfString(n, s); }