关于flutter:如何在Dart字符串中插入字符?

How to insert characters into a Dart String?

我想在给定位置的Dart字符串中添加一些空格,就像这样(在Java中)。

所以...

1
'XPTOXXSFXBAC' become 'XPTO XXSF XBAC'

有没有简单的方法?


您可以使用String中的replaceAllMapped方法,必须添加正则表达式,如下所示:

1
2
 final value = "XPTOXXSFXBAC".replaceAllMapped(RegExp(r".{4}"), (match) =>"${match.group(0)}");
 print("value: $value");


1
2
3
 var x= 'XPTOXXSFXBAC';
 x = x.substring(0, 4) +"" + x.substring(4, 8) +"" + x.substring(8, x.length);
 print(x) ;

现场演示:https://dartpad.dartlang.org/cold-sunset-7167


有一个dart程序包,它为String操作提供了一些帮助程序类。

GitHub:https://github.com/Ephenodrom/Dart-Basic-Utils
通过以下方式安装:

1
2
dependencies:
  basic_utils: ^1.5.0

用法

1
2
3
4
5
6
7
String s ="";
s = StringUtils.addCharAtPosition("1234567890","-", 3);
print(s); //"123-4567890"
s = StringUtils.addCharAtPosition("1234567890","-", 3, repeat: true);
print(s); //"123-456-789-0"
s = StringUtils.addCharAtPosition("1234567890","-", 12);
print(s); //"1234567890"

附加信息 :

这些都是StringUtils类中的所有方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String defaultString(String str, {String defaultStr = ''});
bool isNullOrEmpty(String s);
bool isNotNullOrEmpty(String s);
String camelCaseToUpperUnderscore(String s);
String camelCaseToLowerUnderscore(String s);
bool isLowerCase(String s);
bool isUpperCase(String s);
bool isAscii(String s);
String capitalize(String s);
String reverse(String s);
int countChars(String s, String char, {bool caseSensitive = true});
bool isDigit(String s);
bool equalsIgnoreCase(String a, String b);
bool inList(String s, List<String> list, {bool ignoreCase = false});
bool isPalindrome(String s);
String hidePartial(String s, {int begin = 0, int end, String replace ="*"});
String addCharAtPosition(String s, String char, int position,{bool repeat = false});


您的问题是不必要的特定:您只想在另一个Dart字符串中插入字符(或字符串)。空格并不特殊。

方法1

1
2
3
4
5
6
7
8
9
10
String toSpaceSeparatedString(String s) {
  var start = 0;
  final strings = <String>[];
  while (start < s.length) {
    final end = start + 4;
    strings.add(s.substring(start, end));
    start = end;
  }
  return s.join(' ');
}

方法2(效率较低)

1
2
3
4
5
6
7
8
9
10
String toSpaceSeparatedString(String s) {
  const n = 4;
  assert(s.length % n == 0);
  var i = s.length - n;
  while (i > 0) {
    s = s.replaceRange(i, i, ' ');
    i -= n;
  }
  return s;
}

方法2效率较低(它需要重复插入String中,因此需要重复复制String的相同部分),并且比较尴尬(它从String的末尾迭代到开始),因此该索引是稳定的),并且具有更多的极端情况(为简单起见,我假设输入字符串可被子字符串长度平均整除)。但是,我将其包含在此处是因为它演示了使用String.replaceRange的方法,该方法通常可以将一个String插入另一个String,并且对于一次性的情况可能更简单。