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}");
}