Dart移除列表最后一个元素及删除字符串末尾斜杠的方法
问题场景
我是Dart的初学者,现有代码如下:
void main() { var abf = '+37.4054-122.0999/'; var abf2; abf2 = abf.replaceAll("+"," "); var abf1 = abf2.split(RegExp('(?=[+-])')); print (abf1[0]); print (abf1[1]); }
上述代码可将abf拆分为两个坐标值,目前有两个待实现的需求:
- 移除字符串末尾的
/字符,之前尝试多种基于split的实现,仅能成功替换+,始终无法移除末尾的/ - 了解Dart中移除列表最后一个元素的具体实现方式
实现方案
1. 移除字符串末尾的/
split方法无法移除末尾/的核心原因是:split的作用是按匹配规则切割字符串生成列表,本质是拆分逻辑而非字符删除逻辑,用来处理末尾固定字符属于方法选型错误,自然达不到预期效果。
可以根据自己的Dart版本选最简便的实现:
- Dart 2.18及以上版本,直接用内置的
removeSuffix方法,只会删字符串末尾匹配到的目标字符,不会影响其他位置的同名字符:void main() { var abf = '+37.4054-122.0999/'; abf = abf.removeSuffix('/'); // 直接移除末尾的/ var abf2 = abf.replaceAll("+"," "); var abf1 = abf2.split(RegExp('(?=[+-])')); print(abf1[0].trim()); // 加trim去掉替换+时生成的前导空格 print(abf1[1]); } - 兼容所有Dart版本的实现,可以用末尾判断+截取,或者正则替换末尾匹配的斜杠:
// 方式1:判断后截取 if (abf.endsWith('/')) { abf = abf.substring(0, abf.length - 1); } // 方式2:正则匹配末尾斜杠替换,支持末尾有多个连续斜杠的场景 abf = abf.replaceAll(RegExp(r'/+$'), '');
2. 移除列表最后一个元素
Dart的List内置了对应方法,根据是否需要修改原列表选对应实现即可:
- 需要修改原列表、同时获取被移除的最后一个元素:用
removeLast()方法var coordinateList = [' 37.4054', '-122.0999', '']; // 调用前先判断列表非空,避免空列表调用抛异常 if (coordinateList.isNotEmpty) { var removedItem = coordinateList.removeLast(); } print(coordinateList); // 输出 [' 37.4054', '-122.0999'] - 不需要修改原列表,只想得到去掉最后一个元素的新列表:用
sublist截取即可var originList = [' 37.4054', '-122.0999', '']; // 截取从索引0到倒数第二位的内容生成新列表,原列表保持不变 var newList = originList.sublist(0, originList.length - 1);
内容的提问来源于stack exchange,提问作者tornadoviking
相关产品推荐
相关产品推荐

