Dart基础 03 - String类型

120 阅读3分钟

7.3 String 类型

注意: 字符串调用方法后,字符串本身的内容没有改变,而是创建了一个新的字符串。

7.3.1 字符串的定义

Dart 字符串是UTF-16编码单元的序列 Dart 中的字符中可以用单引号双引号来定义。 如果在定义一个多行的字符串,需要三个单引号或双引号来定义, 会保留换行符及其它空白字符。

void main(List<String> args) {
  var name = 'jack';
  String phone = "110";
  var addresss = '''
  广东省
        深圳市
              宝安区

                    西乡街道

''';

  print(name);
  print(phone);
  print(addresss);
}

7.3.2 字符串的拼接

字符串的拼接 + , +=, *=, ${表达式}, 注意没有-=

void main(List<String> args) {
  var str = "Dart";
  str = "学习 " + str;
  print(str);

  str += "! ";
  print(str);

  str *= 3;
  print(str);

  int x = 10;
  int y = 20;
  print("$x + $y = ${x + y}");
}

7.3.3 字符串的大小写转换

全大写 toUpperCase() 全小写 toLowerCase()

void main(List<String> args) {
  print("ABC".toLowerCase());
  print("hello".toUpperCase());
}

7.3.4 字符串的比较

直接使用 == 判断 使用 compareTo 比较内容

void main(List<String> args) {
  print("abc" == "abc");
  print("Abc" == "ABC");

  // compare 比较的是ASCII码的排序
  print("jack".compareTo("jack")); // 0
  print("A".compareTo("B")); // -1, A在B前面所以是-1
}

7.3.5 字符串的字符与编码

Dart 中的字符串下标只能用来获取每个位置的字符,不能修改字符。 下标访问不能越界

void main(List<String> args) {
  const str = "Dart";
  print(str[0]); // D
  print(str[3]);
  // print(str[50]); // 崩溃,越界访问

  // 获取字符串的编码
  print(str.codeUnitAt(0)); // ASCII码编号 68
  // A - 65
  // a - 97
  // 0 - 48
}

7.3.6 字符串的长度

获取字符串的长度 length 判断字符串是否为空或非空 isEmpty/isNotempty

void main(List<String> args) {
  var str = "我在学习Dart!";
  print(str.length); // 9
  print(str.isEmpty);
  print(str.isNotEmpty);

  print("".length);
  print(" ".isEmpty);
  print(" ".isNotEmpty);
}

7.3.7 字符串的查找

查找字符串的位置

void main(List<String> args) {
  var domain = "https://www.baidu.com";

  print(domain.startsWith("http"));
  print(domain.endsWith(".com"));
  print(domain.contains("baidu"));

  print(domain.indexOf("w")); // 8
  print(domain.lastIndexOf("w")); // 10
}

7.3.8 字符串的截取

substring(start, end); 截取的范围是 [start, end) 区域内的字符,end 和 start 一样都表示位置,不是数量。(这点和 Swift 是不同的)

void main(List<String> args) {
  var str = "hello world";
  print(str.substring(2, 8)); // 获取下标为2,3,4,5,6,7位置的字符 ll0 wo
  print(str.substring(0, str.length)); // 全部 hello world
  print(str.substring(2)); // 直接截取到末尾
  print(str.substring(3, 3)); // 空字符串
}

7.3.9 字符串的分隔

split 方法的使用

void main(List<String> args) {
  var str = "hello world";
  var datas = str.split("");
  print(
      "datas: $datas, 类型: ${datas.runtimeType}"); // [h, e, l, l, o,  , w, o, r, l, d], 类型: List<String>

  datas = str.split(" ");
  print(
      "datas: $datas, 类型: ${datas.runtimeType}"); // [hello, world], 类型: List<String>

  // 使用正则表达式
  datas = str.split(RegExp(r'\s'));
  print(
      "datas: $datas, 类型: ${datas.runtimeType}"); // [hello, world], 类型: List<String>

  datas = str.split("llo");
  print(
      "datas: $datas, 类型: ${datas.runtimeType}"); // [hello, world], 类型: List<String>
}

7.3.10 取消字符串转义

在字符串的引号前加上r

void main(List<String> args) {
  /**
   *abc	def
  123
  abc\tdef\n123
   */
  print("abc\tdef\n123"); // 转义
  print(r"abc\tdef\n123"); // 原样输出
}

7.3.11 替换字符串

replace 的使用


void main(List<String> args) {
  var str = "Hello Wolrd";

  print(str.replaceFirst("l", "我在这"));
  print(str.replaceAll("o", "0"));

  // 使用正则 替换每个字符
  print(str.replaceAll(RegExp(r'.'), 'A'));

  print(str.replaceRange(0, 1, "ABC"));
}

7.3.12 去除空格

tirm 的使用,和其它语言一样,只能去除两端的空格,无法去除中间的空格。

void main(List<String> args) {
  var str = " ABC  DE    D ";
  print("str = |$str|");
  print("|" + str.trim() + "|");
  print("str = |$str|");

  str = "    ABC    ";
  print("|" + str.trim() + "|");
  print("str = |$str|");
}

7.3.13 StringBuf 的使用

可变字符串

..是级联运算符,在后面会说明。


void main(List<String> args) {
  var buf = StringBuffer();
  buf
    ..write("122")
    ..write(" ")
    ..writeAll(['A', 'B', 'C', 'D', '中文']);

  print("buf: $buf, 类型: ${buf.runtimeType}"); // StringBuffer

  var str = buf.toString();
  print("str = $str, 类型: ${str.runtimeType}");
}