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

Jan*_*sen 11 dart

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

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

我现在正在使用这个,但感觉很难记住而且不太通用:

final trailing = RegExp(r"/+$");
final trimmed = "test///".replaceAll(trailing, "");
assert(trimmed == "test");
Run Code Online (Sandbox Code Playgroud)

lrn*_*lrn 10

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

我只是做我自己的功能:

String removeTrailing(String pattern, String from) {
  if (pattern.isEmpty) return from;
  var i = from.length;
  while (from.startsWith(pattern, i - pattern.length)) i -= pattern.length;
  return from.substring(0, i);
}
Run Code Online (Sandbox Code Playgroud)

然后您可以将其用作:

final trimmed = removeTrailing("/", "test///")
assert(trimmed == "test");
Run Code Online (Sandbox Code Playgroud)

相应的trimLeading函数是:

String trimLeading(String pattern, String from) {
  if (pattern.isEmpty) return from;
  var i = 0;
  while (from.startsWith(pattern, i)) i += pattern.length;
  return from.substring(i);
}
Run Code Online (Sandbox Code Playgroud)


Mag*_*s W 5

由于现有的答案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);
}
Run Code Online (Sandbox Code Playgroud)