2.a 字符串 – 《简单易懂的Dart》

本篇是从2.1 变量与类型和2.2 注释与中文支持中独立出的有关Dart字符串的内容.

由于Dart中的字符串与其他类型相比有些特殊,所以该部分被独立出来,单独进行讲解.

2.a.1 定义字符串

字符串类型为String,也可以用var进行声明.

定义一个字符串使用””或者”都是合法的,下面这两个字符串在本质上是相同的:

"简单易懂的Dart"
'简单易懂的Dart'  

需要注意的是,Dart中无论使用”还是’,其字符内容本身都是可解释字符,也就是说反斜杠以及其他特殊关键字会发生作用.

比如使用\n打印多行字符串:

void main(){  
  print('Hello\nWorld');
}

输出结果:

Hello  
World  

多行字符串可以使用”’或”””来进行定义,和单行字符串一样,它们也是可解释字符.

2.a.2 相等判断

2.a.1中提到字符串相同这一概念,在Dart中我们可以通过=对其进行判断.

这里用一个简单的例子判断上面两种符号定义的字符串是否有区别:

void main(){  
  print("简单易懂的Dart"=='简单易懂的Dart');
  print("简单易懂的Dart"==='简单易懂的Dart');
}

输出结果:

true  
true  

2.a.3 连接字符串常量

Dart连接字符串常量的方式比较特殊,它不需要运算符.

比如我们定义一个字符串变量,它的值为字符串”Hello World”.

我们可以这样做:

void main(){  
  String s='Hello' " " 'World';
  print(s);
}

由此可见连接字符串常量的方法很简单,只需要将多个字符串常量写在一起Dart就会自动完成各部分的连接形成一个完整的字符串.

2.a.4 连接字符串变量

在Dart发展初期,是有字符串变量的连接运算符的,不过后来种种原因,这个运算符取消了.

理由是Dart有一种更好的方式去连接字符串变量,而且这种方式和bash shell非常相似.

那么来看看Dart是怎么连接字符串变量的吧.

首先我们弄两个字符串变量,命名为a,b.

String a='Hello';  
String b='World';  

好了,现在我们要输出’Hello World’,该怎么做呢?

也许有人试过这样:

print(a+' '+b);  

显然是不行的,之前我已经说过没有运算符可以用了.

可能还有人试过连接字符串常量时使用的方法:

print(a ' ' b);  

很可惜a和b已经不是常量了,所以该方法不适用.

我们需要做的是:把变量a和b 嵌入 输出字符串中.

要输出的字符串是’Hello World’,a是’Hello’,b是’World’.

在2.a.1中我提到Dart的字符串是可解释字符串,那么a和b在字符串中如何解释并嵌入呢?

答案是使用’${对象}’格式,上面的’Hello World’同理写为’${a} ${b}’,这种方式称为字符串插值.

让我们来运行一次完整的代码:

void main(){  
  String a='Hello';
  String b='World';
  print('${a} ${b}');
}

按下Ctrl+R,正确打印Hello Wolrd.

花括号中的内容是要合并的”对象”,所以就算是类实例的属性或List中的索引都可以.

因此,当字符串插值只作用在单个变量的时候,有一种省略花括号的简略写法,下面这段代码的执行结果与之前的代码相同:

void main(){  
  String a='Hello';
  String b='World';
  print('$a $b');
}

2.a.5 原生字符串

原生字符串的内容是不可解释字符,可以在字符串前加上r来定义.

比如让多行解释无效化:

void main(){  
  String s = r'Hello\nWorld';
  print(s);
}

打印出的内容为单行的’Hello\nWorld’.

注意:Dart Build 12784之前的版本中原生字符串定义时使用的是@,在2012年9月26日的更新中更改为r.

2.a.6 StringBuffer

由于涉及到面向对象的知识,将放在第三章学习.