如何获取字符串中的最后n个字符?
我尝试使用:
var string = 'Dart is fun';
var newString = string.substring(-5);
但这似乎不正确
答案 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));