Как получить последние n символов в строке в Dart?

Как получить последние n символов в строке?

Я пробовал использовать:

var string = 'Dart is fun';
var newString = string.substring(-5);

Но это не кажется правильным

41
0
27 699
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
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'

Другие вопросы по теме