有没有办法通过一些符号来分割字符串,但仅在第一次出现时?
示例:
date: '2019:04:01'
应拆分为 date
和 '2019:04:01'
date:'2019:04:01'
或这样 date : '2019:04:01'
,但仍应分为 date
和 '2019:04:01'
string.split(':');
我尝试使用
split()
方法。但它没有限制属性或类似的东西。
您永远无法使用 split 命令完成所有这些操作,包括修剪空格。你必须自己做。这是一种方法:
String s = "date : '2019:04:01'";
int idx = s.indexOf(":");
List parts = [s.substring(0,idx).trim(), s.substring(idx+1).trim()];
您可以拆分字符串,跳过创建的列表的第一项,然后将它们重新连接到字符串中。
在你的情况下,它会是这样的:
var str = "date: '2019:04:01'";
var parts = str.split(':');
var prefix = parts[0].trim(); // prefix: "date"
var date = parts.sublist(1).join(':').trim(); // date: "'2019:04:01'"
修剪方法删除第一个冒号周围任何不必要的空格。
只需在字符串上使用 split 方法即可。它接受分隔符/分隔符/模式来分割文本。它返回由提供的分隔符/分隔符/模式分隔的值列表。
用途:
const str = 'date: 2019:04:01';
final values = string.split(': '); // Notice the whitespace after colon
输出:
受到 python 的启发,我编写了这个实用函数来支持字符串
split
以及可选的最大分割数。用途:
split("a=b=c", "="); // ["a", "b", "c"]
split("a=b=c", "=", max: 1); // ["a", "b=c"]
split("",""); // [""] (edge case where separator is empty)
split("a=", "="); // ["a", ""]
split("=", "="); // ["", ""]
split("date: '2019:04:01'", ":", max: 1) // ["date", " '2019:04:01'"] (as asked in question)
在代码中定义此函数:
List<String> split(String string, String separator, {int max = 0}) {
var result = List<String>();
if (separator.isEmpty) {
result.add(string);
return result;
}
while (true) {
var index = string.indexOf(separator, 0);
if (index == -1 || (max > 0 && result.length >= max)) {
result.add(string);
break;
}
result.add(string.substring(0, index));
string = string.substring(index + separator.length);
}
return result;
}
我发现通过删除第一项并“加入”列表的其余部分非常简单
String date = "date:'2019:04:01'";
List<String> dateParts = date.split(":");
List<String> wantedParts = [dateParts.removeAt(0),dateParts.join(":")];
使用正则表达式
string.split(RegExp(r":\s*(?=')"));
\s*
匹配零个或多个空白字符(?=')
匹配 '
但不包含其自身您可以使用扩展并使用此扩展来分隔 RichText/TextSpan 用例的文本:
extension StringExtension on String {
List<String> controlledSplit(
String separator, {
int max = 1,
bool includeSeparator = false,
}) {
String string = this;
List<String> result = [];
if (separator.isEmpty) {
result.add(string);
return result;
}
while (true) {
var index = string.indexOf(separator, 0);
print(index);
if (index == -1 || (max > 0 && result.length >= max)) {
result.add(string);
break;
}
result.add(string.substring(0, index));
if (includeSeparator) {
result.add(separator);
}
string = string.substring(index + separator.length);
}
return result;
}
}
然后您可以通过该扩展名将其引用为任何字符串的方法:
void main() {
String mainString = 'Here was john and john was here';
print(mainString.controlledSplit('john', max:1, includeSeparator:true));
}
只需将列表转换为字符串并搜索
productModel.tagsList.toString().contains(filterText.toLowerCase())
只需在字符串上写一个扩展
extension StringExtension on String {
(String, String) splitFirst({String separator = ":"}) {
int separatorPosition = indexOf(separator);
if (separatorPosition == -1) {
return (this, "");
}
return (substring(0, separatorPosition), substring(separatorPosition + separator.length));
}}
然后像这样使用它
final (firstPart, secondPart) = yourString.splitFirst();
void main() {
var str = 'date: 2019:04:01';
print(str.split(" ").last.trim()); //2019:04:01
}