var newString = string.substring(string.length - 5);
Хотя @Alexandre Ardhuin прав, важно отметить, что если в строке меньше n символов, будет возбуждено исключение:
Uncaught Error: RangeError: Value not in range: -5
Вам следует проверить длину, прежде чем запускать ее таким образом.
String newString(String oldString, int n) {
if (oldString.length >= n) {
return oldString.substring(oldString.length - n)
} else {
// return whatever you want
}
}
Пока вы это делаете, вы также можете подумать о том, чтобы данная строка не была нулевой.
oldString ??= '';
Если вам нравятся однострочники, другими вариантами могут быть:
String newString = oldString.padLeft(n).substring(max(oldString.length - n, 0)).trim()
Если вы ожидаете, что он всегда будет возвращать строку длиной n, вы можете дополнить ее любым значением по умолчанию (.padLeft(n, '0')) или просто не использовать trim().
По крайней мере, с Dart SDK 2.8.1 это так. Я знаю, что они работают над улучшением нулевой безопасности, и это может измениться в будущем.
var newString = string.substring((string.length - 5).clamp(0, string.length));
примечание: я использую зажим, чтобы избежать ошибки диапазона значений. Тем самым вы также невосприимчивы к отрицательным n-символам, если это как-то рассчитано.
На самом деле мне интересно, что у дротика нет такого зажима, реализованного в методе подстроки.
Если вы хотите быть осведомленным об нуле, просто используйте:
var newString = string?.substring((string.length - 5).clamp(0, string.length));
Создайте расширение:
extension E on String {
String lastChars(int n) => substring(length - n);
}
Применение:
var source = 'Hello World';
var output = source.lastChars(5); // 'World'