概述

dart:core 库提供了一个少量但是重要的内置功能集合。 该库会被自动导入每个 Dart 程序。

包括:内置类型,集合和其他核心功能。

控制台打印

顶级 print() 方法接受一个参数 任意对象) 并输出显示这个对象的字符串值(由 toString() 返回) 到控制台。

  1. var name = "xiaoyu";
  2. print('My name is $name.');

通过 $ 可以在字符串中引入变量名。

数字

相关内容:
📃 数据类型

参考:数字

字符串

相关内容:
📃 数据类型

StringBuffer

要以代码方式生成字符串,可以使用 StringBuffer 。 在调用 toString() 之前, StringBuffer 不会生成新字符串对象。 writeAll() 的第二个参数为可选参数,用来指定分隔符, 下例中使用空格作为分隔符。

  1. var sb = StringBuffer();
  2. sb
  3. ..write('Use a StringBuffer for ')
  4. ..writeAll(['efficient', 'string', 'creation'], ' ')
  5. ..write('.');
  6. var fullString = sb.toString();
  7. print(fullString); // Use a StringBuffer for efficient string creation.

正则表达式

RegExp类提供与JavaScript正则表达式相同的功能。 使用正则表达式可以对字符串进行高效搜索和模式匹配。

  1. // 下面正则表达式用于匹配一个或多个数字。
  2. var numbers = RegExp(r'\d+');
  3. var allCharacters = 'llamas live fifteen to twenty years';
  4. var someDigits = 'llamas live 15 to 20 years';
  5. // contains() 能够使用正则表达式。
  6. print(allCharacters.contains(numbers)); // false
  7. print(someDigits.contains(numbers)); // true
  8. // 替换所有匹配对象为另一个字符串。
  9. var exedOut = someDigits.replaceAll(numbers, 'XX');
  10. print(exedOut); // llamas live XX to XX years

直接使用正则表达式中的某些方法(hasMatch、allMatches):

  1. var numbers = RegExp(r'\d+');
  2. var someDigits = 'llamas live 15 to 20 years';
  3. // 检查正则表达式是否在字符串中匹配到对象。
  4. print(numbers.hasMatch(someDigits)); // true
  5. // 迭代所有匹配对象
  6. for (var match in numbers.allMatches(someDigits)) {
  7. print(match.group(0)); // 15, then 20
  8. }

参考:字符和正则表达式

URI

Uri 类 提供对字符串的编解码操作。 这些函数用来处理 URI 特有的字符,例如 = 。 Uri 类还可以解析和处理 URI—host,port,scheme等组件。

编码和解码

使用 encodeFull()decodeFull() 方法, 对 URI 中除了特殊字符(例如 /:&#)以外的字符进行编解码, 这些方法非常适合编解码完整合法的 URI,并保留 URI 中的特殊字符。

  1. var uri = 'http://example.org/api?foo=some message';
  2. var encoded = Uri.encodeFull(uri); // http://example.org/api?foo=some%20message
  3. print(encoded);
  4. var decoded = Uri.decodeFull(encoded);
  5. print(uri == decoded); // true

使用 encodeComponent()decodeComponent() 方法, 对 URI 中具有特殊含义的所有字符串字符,特殊字符包括(但不限于)/&, 和 :

  1. var uri = 'http://example.org/api?foo=some message';
  2. var encoded = Uri.encodeComponent(uri);
  3. print(encoded); // http%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message
  4. var decoded = Uri.decodeComponent(encoded);
  5. print(uri == decoded); // true

解析URI

使用 Uri 对象的字段(例如 path), 来获取一个 Uri 对象或者 URI 字符串的一部分。 使用 parse() 静态方法,可以使用字符串创建 Uri 对象。

  1. var uri = Uri.parse('http://example.org:8080/foo/bar#frag');
  2. print(uri.scheme); // http
  3. print(uri.host); // example.org
  4. print(uri.path); // /foo/bar
  5. print(uri.fragment); // frag
  6. print(uri.origin); // http://example.org:8080

构建URI

使用 Uri() 构造函数,可以将各组件部分构建成 URI 。

  1. var uri = Uri(scheme: 'http', host: 'example.org', path: '/foo/bar', fragment: 'frag');
  2. assert(uri.toString() == 'http://example.org/foo/bar#frag');

参考:URI

DateTime和Duration

创建日期时间对象

  1. // 获取当前时刻。
  2. var now = DateTime.now();
  3. print(now); // 2020-12-17 16:28:20.650318
  4. // 根据本地时区创建 DateTime 对象。
  5. var y2k = DateTime(2000);
  6. print(y2k); // 2000-01-01 00:00:00.000
  7. // 指定年月日。
  8. y2k = DateTime(2000, 1, 2);
  9. print(y2k); // 2000-01-02 00:00:00.000
  10. // 将日期指定为 UTC 时区。
  11. y2k = DateTime.utc(2000);
  12. print(y2k); // 2000-01-01 00:00:00.000Z
  13. // 指定自Unix纪元以来,以毫秒为单位的日期和时间。
  14. y2k = DateTime.fromMillisecondsSinceEpoch(946684800000, isUtc: true);
  15. print(y2k); // 2000-01-01 00:00:00.000Z
  16. // 解析ISO 8601日期。
  17. y2k = DateTime.parse('2000-01-01T00:00:00Z');
  18. print(y2k); // 2000-01-01 00:00:00.000Z

日期时间计算

在Dart中的日期时间计算尤其简单,通过简单的 addsubtract 结合 Duration 对象即可完成。

  1. var y2k = DateTime.utc(2000);
  2. // 增加一年。
  3. var y2001 = y2k.add(const Duration(days: 366));
  4. print(y2001.year); // 2001
  5. // 减少30天。
  6. var december2000 = y2001.subtract(const Duration(days: 30));
  7. print(december2000.year); // 2000
  8. print(december2000.month); // 12
  9. // 计算两个时刻之间的查,
  10. // 返回 Duration 对象。
  11. var duration = y2001.difference(y2k);
  12. print(duration.inDays); // 366 (y2k was a leap year.)

参考:日期和时间DateTimeDuration

比较(Comparable)

如果实现了 Comparable 接口, 也就是说可以将该对象与另一个对象进行比较, 通常用于排序。 compareTo() 方法在 小于 时返回 < 0, 在 相等 时返回 0, 在 大于 时返回 > 0。

  1. void main() {
  2. var short = const Line(1);
  3. var long = const Line(100);
  4. print(short.compareTo(long)); // -99
  5. }
  6. class Line implements Comparable<Line> {
  7. final int length;
  8. const Line(this.length);
  9. @override
  10. int compareTo(Line other) => length - other.length;
  11. }

迭代(Iterator)

Iterable][] 和 Iterator 类支持 for-in 循环。 当创建一个类的时候,继承或者实现 Iterable,可以为该类提供用于 for-in 循环的 Iterators。 实现 Iterator 来定义实际的遍历操作。

比如迭代一个很长的字符串,遇到空格则进入下一次迭代,每次返回当前空格前的字符串:

  1. void main() {
  2. const myString = 'This is a long string that I want to iterate over.';
  3. final myIterable = TextRuns(myString);
  4. for (var textRun in myIterable) {
  5. print(textRun);
  6. }
  7. }
  8. class TextRuns extends Iterable<String> {
  9. TextRuns(this.text);
  10. final String text;
  11. @override
  12. Iterator<String> get iterator => TextRunIterator(text);
  13. }
  14. class TextRunIterator implements Iterator<String> {
  15. TextRunIterator(this.text);
  16. final String text;
  17. String _currentTextRun;
  18. int _startIndex = 0;
  19. int _endIndex = 0;
  20. final breakChar = RegExp(' ');
  21. // 当前迭代的元素
  22. @override
  23. String get current => _currentTextRun;
  24. // 下一次迭代
  25. @override
  26. bool moveNext() {
  27. _startIndex = _endIndex;
  28. // 迭代结束(迭代出口:当前文本已遍历完成)
  29. if (_startIndex == text.length) {
  30. _currentTextRun = null;
  31. return false;
  32. }
  33. // 获取下一个迭代元素(遇到空格就返回一次)
  34. final next = text.indexOf(breakChar, _startIndex);
  35. _endIndex = (next != -1) ? next + 1 : text.length;
  36. _currentTextRun = text.substring(_startIndex, _endIndex);
  37. return true;
  38. }
  39. }

输出:

  1. This
  2. is
  3. a
  4. long
  5. string
  6. that
  7. I
  8. want
  9. to
  10. iterate
  11. over.

如果需要在循环中添加循环条件,可以使用 where

  1. myIterable
  2. .where((str) => str.length > 3)
  3. .forEach((element) => print(element));

输出:

  1. This
  2. long
  3. string
  4. that
  5. want
  6. iterate
  7. over.