Flutter/Dart:按第一次出现拆分字符串

Pas*_*cal 15 split dart

有没有办法用某个符号分割字符串但只在第一次出现时

示例date: '2019:04:01'应该拆分为dateand'2019:04:01'
它也可以看起来像这样date:'2019:04:01'或这样date : '2019:04:01',仍然应该拆分为date'2019:04:01'

string.split(':');
Run Code Online (Sandbox Code Playgroud)

我尝试使用该split()方法。但它没有限制属性或类似的东西。

Wal*_*vis 20

您永远无法使用 split 命令完成所有这些操作,包括修剪空格。你必须自己做。这是一种方法:

String s = "date   :   '2019:04:01'";
int idx = s.indexOf(":");
List parts = [s.substring(0,idx).trim(), s.substring(idx+1).trim()];
Run Code Online (Sandbox Code Playgroud)


nvi*_*vi9 14

您可以拆分字符串,跳过创建的列表的第一项并将它们重新连接到字符串。

在你的情况下,它会是这样的:

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'"
Run Code Online (Sandbox Code Playgroud)

修剪方法删除第一个冒号周围的任何不必要的空格。


OMi*_*hah 5

只需使用string.split(": ")它就会返回您需要的东西。注意冒号后的空格:

在此处输入图片说明


Jos*_*ush 5

受到 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)
Run Code Online (Sandbox Code Playgroud)

在您的代码中定义此函数:

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;
}
Run Code Online (Sandbox Code Playgroud)

在线演示:https://dartpad.dev/e9a5a8a5ff803092c76a26d6721bfaf4