如何在Dart中获取字符串中的最后n个字符?

时间:2019-04-29 14:52:15

标签: dart flutter

如何获取字符串中的最后n个字符?

我尝试使用:

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

但这似乎不正确

4 个答案:

答案 0 :(得分:6)

虽然@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开始就是这种情况。我知道他们正在努力改善零安全性,并且将来可能会改变。

答案 1 :(得分:1)

var newString = string.substring(string.length - 5);

答案 2 :(得分:1)

创建扩展程序:

extension E on String {
  String lastChars(int n) => substring(length - n);
}

用法:

var source = 'Hello World';
var output = source.lastChars(5); // 'World'

答案 3 :(得分:0)

var newString = string.substring((string.length - 5).clamp(0, string.length));

注意:我正在使用钳位以避免数值范围错误。这样一来,即使以某种方式计算得出的结果,您也可以不受负n个字符的影响。

事实上,我想知道dart在substring方法中没有实现这种钳位。

如果您想了解空值,只需使用:

var newString = string?.substring((string.length - 5).clamp(0, string.length));