在Dart中,trim()
,trimLeft()
和trimRight()
字符串方法不使用参数来指定不需要的非空白字符。
在Dart中从字符串末尾修剪特定字符的最佳方法是什么?
我现在正在使用它,但是感觉很难记住并且不太通用:
final trailing = RegExp(r"/+$");
final trimmed = "test///".replaceAll(trailing, "");
assert(trimmed == "test");
答案 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);
}