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; --i; } ret substring(s, i+1); } static S extractLastNLinesOfString(S s, int n) { ret extractLastNLinesOfString(n, s); }