在Dart中修剪尾随字符的最佳方法是什么?

时间:2019-07-12 10:32:13

标签: dart

在Dart中,trim()trimLeft()trimRight()字符串方法不使用参数来指定不需要的非空白字符。

在Dart中从字符串末尾修剪特定字符的最佳方法是什么?

我现在正在使用它,但是感觉很难记住并且不太通用:

final trailing = RegExp(r"/+$");
final trimmed = "test///".replaceAll(trailing, "");
assert(trimmed == "test");

2 个答案:

答案 0 :(得分:2)

没有从字符串末尾修剪非空格的特定功能。 您基于RegExp的方法是合理的,但是当要删除的字符在RegExp中有意义时,可能会很危险。

我要发挥自己的作用:

String removeTrailing(String pattern, String from) {
  int i = from.length;
  while (from.startsWith(pattern, i - pattern.length)) i -= pattern.length;
  return from.subtring(0, i);
}

然后您可以将其用作:

final trimmed = removeTrailing("/", "test///")
assert(trimmed == "test");

相应的trimLeading函数为:

String trimLeading(String pattern, String from) {
  int i = 0;
  while (from.startsWith(pattern, i)) i += pattern.length;
  return from.substring(i);
}

答案 1 :(得分:2)

由于lrn的现有答案存在很多问题-包括无限循环场景-我以为我会发布我的版本。

String trimLeft(String from, String pattern){
    if( (from??'').isEmpty || (pattern??'').isEmpty || pattern.length>from.length ) return from;

    while( from.startsWith(pattern) ){
        from = from.substring(pattern.length);
    }
    return from;
}

String trimRight(String from, String pattern){
    if( (from??'').isEmpty || (pattern??'').isEmpty || pattern.length>from.length ) return from;

    while( from.endsWith(pattern) ){
        from = from.substring(0, from.length-pattern.length);
    }
    return from;
}

String trim(String from, String pattern){
    return trimLeft(trimRight(from, pattern), pattern);
}