如何在Dart的String中提取两个固定唯一标识间的内容?
在Dart中提取两个固定唯一标识间字符串的最优实现
已知场景:字符串中两个标识固定且唯一,以'helloWorld'为例,要提取'hel'和'ld'之间的内容(预期结果'loWor'),最优实现方式如下:
实现代码
void main() { String myValue = 'helloWorld'; const startMarker = 'hel'; const endMarker = 'ld'; // 获取起始标识的结束索引 final startIdx = myValue.indexOf(startMarker) + startMarker.length; // 获取结束标识的起始索引 final endIdx = myValue.indexOf(endMarker); // 校验标识有效性与顺序 if (startIdx != startMarker.length - 1 && endIdx != -1 && startIdx < endIdx) { final extractedContent = myValue.substring(startIdx, endIdx); print(extractedContent); // 输出: loWor } else { // 处理异常情况 print('标识不存在或顺序错误'); } }
方案优势
- 性能最优:直接使用Dart字符串内置的
indexOf和substring方法,避免正则表达式的额外解析开销,对于固定唯一标识的场景,比正则匹配更高效。 - 逻辑清晰:通过定位标识位置直接截取内容,代码可读性强,易于维护。
- 异常安全:增加了有效性校验,避免因标识缺失或顺序颠倒导致的运行时范围错误。
简洁版(需确保标识必存在且顺序正确)
如果能保证两个标识一定存在且起始标识在结束标识之前,可以简化为:
final result = myValue.substring( myValue.indexOf(startMarker) + startMarker.length, myValue.indexOf(endMarker) );
内容的提问来源于stack exchange,提问作者Mohammed Hamdan
相关产品推荐
相关产品推荐

