开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情
定义
字符串通过双引号或者单引号定义,字符串可以通过 + 运算符连接。
String str = "张三";
String str1 = str + '吃饭';
字符串表达式
通过 ${} 标识,可以在字符串中使用表达式:
String str = "再过${1 + 1 + 1}天就放假了"; // 再过3天就放假了
如果表达式只有一个标识符,可以省略 {}
int day = 3;
String str = "再过$day天就放假了";
但我建议无论什么时候都不要省略,因为如果$变量后面是英文的话,连在一起是无法识别的:
int day = 3;
String str = "再过$days天就放假了"; // $day后面跟随s,变量会识别为$days,这就导致找不到变量而报错
可以通过变量后面加空格来避免上面这种情况,但是打印的字符串也会有空格,但这明显不是我们想要的:
int day = 3;
String str = "再过$day s天就放假了"; // 再过3 s天就放假了
字符串拼接
dart中字符串可以通过 + 运算符串连
print('hello' + 'dart');
或者让两个字符串直接相连
print('hello''dart'); // hellodart
print('hello'"dart1");// hellodart1
为了别人可以一眼看懂,建议尽量使用 + 连接字符串
多行文本
一般赋值的字符串都不会有换行格式,如果你想表示换行的文字,可以使用一下几种方法:
1、三个引号
通过三个双引号或者单引号,实现保留空格和换行格式的文本
main() {
String str = ''' 保留所有空格 以及换行格式 ''';
print(str);
}
2、转义字符
通过 \n \r 之类的转义字符,也可以实现换行空格等效果
String str = "In a raw string, even \n isn't special.";
如果你不希望 \n 等字符有效果,只是想当作文本处理,可以在字符前面加 r
String str = r"In a raw string, even \n isn't special."; // r表示原始 raw字符串
String 常用API
一、属性
1、str.codeUnits 获取字符串的 utf16编码
String str = "a";
print(str.codeUnits); // [97]
String str = "abcd";
print(str.codeUnits); // [97, 98, 99, 100]
2、str.isEmpty 字符串是否为空
String str = "";
print(str.isEmpty); // true
String str = "abc";
print(str.isEmpty); // false
3、str.isNotEmpty 字符串是否不为空
String str = "";
print(str.isNotEmpty); // false
String str = "abc";
print(str.isNotEmpty); // true
4、str.length 字符串的长度
String str = "abc";
print(str.length); // 3
二、方法
1、contains() 判断字符串是否包含另一字符串,区分大小写,参数可以接受正则对象
String str = 'hello dart';
str.contains('hello'); // true
str.contains('H'); // false
可以接受第二个参数,index 从字符串的什么位置开始检索
String str = 'hello dart';
str.contains('h',1); // false
2、endWith() 判断字符串是否以某字符串结尾
String str = 'hello dart';
str.endWith('t'); // true
3、startWith() 判断字符串是否以某字符串开头
String str = 'hello dart';
str.startWith('h'); // true
4、indexOf();寻找某一字符串在另外一个字符串中的下标
String str = 'hello dart';
str.indexOf('e'); // 1
str.indexOf('ell'); // 1
str.indexOf('z'); // -1
可以接受第二个参数 index ,表示从str的index位置开始检索
5、lastIndexOf();从字符串后面开始,寻找某一字符串在另外一个字符串中的下标
String str = 'hello world'; s
tr.lastIndexOf('o'); // 8 ,从后面开始寻找,但下标仍是从开始向后排列
可以接受第二个参数 index ,表示从str的倒数index位置开始检索
6、padLeft() 判断字符串是否小于指定长度,如果不足,则在字符串左侧填充指定文字
String str = '123';
str.padLeft(5,'h'); // hh123 ,字符串不足5位,将参数二的字符串,补充差位到str的左侧,
// 无论参数二长度多长,都只 看作一个单位
str.padLeft(5,'hello'); // hellohello123 , 补充两个单位的hello
padRight() 和上面同理,不同的是padRight补充到字符串的右侧
7、split() 根据某一字符串为节点,拆解字符串为数组
String str = "key-value";
str.split("-") // ['key','value']
有个特殊的点需要注意,如果被裁剪的字符串为空,而且用作分割的字符串也为空,那么得到的将是一个空数组,如果用作分割的字符串不为空,则得到长度为1的空字符串数组:
String str = "";
str.split("") // []
str.split("a") // [""]
8、substring() 裁剪指定位置的字符串
String str = "hello";
str.substring(1); // ello
str.substring(1,2) // e
9、toLowerCase() 将字符串转化为小写
String str = "ABC";
str.toLowerCase(); // abc
10、toUpperCase() 将字符串转化为大写
String str = "abc";
str.toUpperCase(); // ABC
11、trim() 去除字符串中的空格
String str = "hello dart";
str.trim(); // hellodart
12、trimLeft() 去除字符串中左侧的空格
13、trimRight() 去除字符串中右侧的空格