如何在 Dart 中通过多个分隔符拆分字符串

时间:2021-05-13 19:39:52

标签: dart split

如果我有这样的字符串:

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"]       );

2 个答案:

答案 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();
  }

}