如果我有这样的字符串:
final myFancyCodez = "AA-BB.CC_DD.EE";
如何将其拆分为多个分隔符?
expect(fancy.multiSplit( ["-", "."] ), ["AA", "BB", "CC_DD", "EE"] );
expect(fancy.multiSplit( [] ), ["AA-BB.CC_DD.EE"] );
expect(fancy.multiSplit( ['_'] ), ["AA-BB.CC", "DD.EE"] );
答案 0 :(得分:2)
我个人会使用类似这样的方法,将分隔符组合成一个正则表达式并使用 split
方法:
import 'package:test/test.dart';
void main() {
const fancy = "AA-BB.CC_DD.EE";
test('Some tests', () {
expect(fancy.multiSplit(["-", "."]), ["AA", "BB", "CC_DD", "EE"]);
expect(fancy.multiSplit([]), ["AA-BB.CC_DD.EE"]);
expect(fancy.multiSplit(['_']), ["AA-BB.CC", "DD.EE"]);
});
}
extension UtilExtensions on String {
List<String> multiSplit(Iterable<String> delimeters) => delimeters.isEmpty
? [this]
: this.split(RegExp(delimeters.map(RegExp.escape).join('|')));
}
答案 1 :(得分:0)
这是一种方法:
extension UtilExtensions on String {
List<String> multiSplit(Iterable<String> delimeters) {
if (delimeters?.isEmpty ?? true) return [this];
if (delimeters.length == 1) return this.split(delimeters.first);
final next = delimeters.skip(1);
return this
.split(delimeters.first)
.expand((i) => i.multiSplit(next))
.toList();
}
}