如何将字符插入 Dart 字符串?
How to insert characters into a Dart String?
我想在给定位置的 Dart 字符串中添加一些空格,就像 this(在 Java 中)。
所以...
'XPTOXXSFXBAC' become 'XPTO XXSF XBAC'
有没有简单的方法?
您可以使用 String
中的 replaceAllMapped 方法,您必须添加正则表达式,如下所示:
final value = "XPTOXXSFXBAC".replaceAllMapped(RegExp(r".{4}"), (match) => "${match.group(0)} ");
print("value: $value");
var x= 'XPTOXXSFXBAC';
x = x.substring(0, 4) + " " + x.substring(4, 8) + " " + x.substring(8, x.length);
print(x) ;
您的问题不必要地具体:您只想将字符(或字符串)插入另一个 Dart 字符串。空格并不特殊。
方法 #1
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(效率较低)
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
,并且对于 one-off 情况可能会更简单。
有一个 dart 包为字符串操作提供了一些助手 classes。
Github : https://github.com/Ephenodrom/Dart-Basic-Utils
安装它:
dependencies:
basic_utils: ^1.5.0
用法
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 的方法class。
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中显示卡号如15XX XXXX XXXX 9876
String num1 = "1567456789099876".replaceAll(RegExp(r'(?<=.{2})\d(?=.{4})'), 'X');
String num = num1.replaceAllMapped(RegExp(r".{4}"), (match) => "${match.group(0)} ");
print(num); //15XX XXXX XXXX 9876
我使用 allMatches 得到了 @diegoveloper 答案的更简单版本。使用 join
.
不会成为额外的分隔符
final myText = 'XPTOXXSFXBAC';
final separator = ' ';
final result = RegExp(r".{4}")
.allMatches(myText)
.map((e) => e.group(0))
.join(separator);
我想在给定位置的 Dart 字符串中添加一些空格,就像 this(在 Java 中)。
所以...
'XPTOXXSFXBAC' become 'XPTO XXSF XBAC'
有没有简单的方法?
您可以使用 String
中的 replaceAllMapped 方法,您必须添加正则表达式,如下所示:
final value = "XPTOXXSFXBAC".replaceAllMapped(RegExp(r".{4}"), (match) => "${match.group(0)} ");
print("value: $value");
var x= 'XPTOXXSFXBAC';
x = x.substring(0, 4) + " " + x.substring(4, 8) + " " + x.substring(8, x.length);
print(x) ;
您的问题不必要地具体:您只想将字符(或字符串)插入另一个 Dart 字符串。空格并不特殊。
方法 #1
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(效率较低)
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
,并且对于 one-off 情况可能会更简单。
有一个 dart 包为字符串操作提供了一些助手 classes。
Github : https://github.com/Ephenodrom/Dart-Basic-Utils 安装它:
dependencies:
basic_utils: ^1.5.0
用法
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 的方法class。
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中显示卡号如15XX XXXX XXXX 9876
String num1 = "1567456789099876".replaceAll(RegExp(r'(?<=.{2})\d(?=.{4})'), 'X');
String num = num1.replaceAllMapped(RegExp(r".{4}"), (match) => "${match.group(0)} ");
print(num); //15XX XXXX XXXX 9876
我使用 allMatches 得到了 @diegoveloper 答案的更简单版本。使用 join
.
final myText = 'XPTOXXSFXBAC';
final separator = ' ';
final result = RegExp(r".{4}")
.allMatches(myText)
.map((e) => e.group(0))
.join(separator);