C#语法文本字面量

在日常生活中,文本用来表示除了数字以外的内容。例如有一个叫“比尔”的人,他的职位为“科长”。那么,“比尔”和“科长”都可以称为文本。在计算机里,现实世界中的文本通常被称为字符和字符串。例如,“比尔”中的每个汉字都是一个字符。而整体构成一个字符串。“科长”也是如此。

字符和字符串的写作规范

上面,我们看到的是常见的文本字面量。但是,很多时候数字内容表达的并不一定是数值。例如,比尔的电话号码是13466668888。对于“13466668888”来说,我们不会理解为一百三十四亿六千六百六十六万八千八百八十八,而是当成一个电话号来理解。由于计算机能力有限,为了避免这类信息对计算机造成困扰,程序对字符和字符串的表示有以下规定:

  • 字符是由单引号(')括起来的单个的字母、数字、字或者符号。
  • 字符串可以表示一个字符序列。
  • 字符串使用一对双引号(")与多个字符组合。
  • 字符串的双引号中可以有任意多个字符。

根据这个规范,如果要在程序中表示字母a,需要写为'a'。字符中只能包含一个字符,因此字符'a'长度为1。如果要在程序中表示比尔的电话号码,必须写为"13466668888"。该字符串的长度为11,因为包含的字符个数为11,而双引号是字符串格式符号,不能算作字符串长度数。

特殊的字符和字符串——转义字符

有时候,需要在字符串中使用特殊字符,例如字符串abc"s。在代码中字符串"abc"s"会产生错误,编译器无法辨认字符串的具体内容。为了解决这个问题,需要使用转义字符。转义字符通过反斜杠“\”与普通字符的组合,来表示一些特殊的字符。转义字符中至少包含两个字符,第一个字符是转义符号“\”,第二个字符是需要表示的字符。常用的转义字符有两种:表示格式的转义字符和表示控制代码的转义字符。

1.表示格式

为了构成字符和字符串,使用了双引号(")和单引号(')。而为了构成转义字符,又使用了反斜杠(\)。如果字符串中需要包含这三个字符,需要使用转义字符如表1.1所示。

表1.1  表示格式的转义字符列表

转义序列

产生的字符

\'

单引号

\"

双引号

\\

反斜杠

【示例1-4】有下列文本内容,需要在程序中使用字符串表示。

I love C#.

I’m studying C#.

在这个文本内容中,第一行内容表达为字符串为"I love C#.",该字符串长度为10(空格与.都算作一个字符)。而第二行内容中有一个单引号,所以需要使用转义字符表达为"I\'m studying C#.",该字符串长度为16。

2.表示控制代码

在文本数据中,会出现一些特殊的符号,如换行符、退格等。这些符号无法看到,但是用来控制文本的格式。这类字符由于无法书写,所以必须使用转义字符表示如表1.2所示。

表1.2  表示控制代码的转义字符序列

转义序列

产生的字符

\a

警报

\b

退格

\f

换页符

\n

换行符

\r

回车

\t

水平制表符

\v

垂直制表符

示例1-4中由于两个文本内容不在同一行,所以之间必须有“\n”来表示换行。因此,这两个文本的正确表示形式为"I love C#.\n I\'m studying C#."。这个字符串的长度为27。

更全面的表达方式——ASCII表

转义字符可以解决大部分的字符表达。但是还是有很多字符无法直接书写,也没有对应的转义字符。这个时候,只能使用ASCII进行表达。ASCII是基于拉丁字母(26个英语字母)的一套电脑编码系统,是现在最通用的单字节编码系统。使用ASCII表示字符的格式如表1.3所示。

表1.3  使用ASCII表示的字符

转义序列

产生的字符

\0

空字符

\ddd

1~3位八进制数所代表的任意字符

\xhh

1~2位十六进制数所代表的任意字符

在表1.3中,使用八进制表示字符时可以表示1~3位八进制数代表的任意字符,即该类转义字符总长度为2~4。使用十六进制表示字符时可以表示1~2位十六进制数代表的任意字符,即该类转义字符总长度为3~4,因为表示十六进制数时“\x”以开头。

【示例1-5】以下代码中使用了转义字符:

'\x2f'

'\013'

其中,\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。

为了更加全面地表示,这里给出了ASCII表的字符的0~127。具体如表1.4所示。

表1.4  ASCII表

十进制

十六进制

字符

十进制

十六进制

字符

十进制

十六进制

字符

十进制

十六进制

字符

0

00

32

20

[空格]

64

40

@

96

60

`

1

01

33

21

!

65

41

A

97

61

a

2

02

34

22

"

66

42

B

98

62

b

3

03

35

23

#

67

43

C

99

63

c

4

04

36

24

$

68

44

D

100

64

d

5

05

37

25

%

69

45

E

101

65

e

6

06

38

26

&

70

46

F

102

66

f

7

07

39

27

'

71

47

G

103

67

g

8

08

\b

40

28

(

72

48

H

104

68

h

9

09

\t

41

29

)

73

49

I

105

69

i

10

0A

\r

42

2A

*

74

4A

J

106

6A

j

11

0B

43

2B

+

75

4B

K

107

6B

k

12

0C

44

2C

,

76

4C

L

108

6C

l

13

0D

\n

45

2D

-

77

4D

M

109

6D

m

14

0E

46

2E

.

78

4E

N

110

6E

n

15

0F



47

2F

/

79

4F

O

111

6F

o

16

10



48

30

0

80

50

P

112

70

p

17

11



49

31

1

81

51

Q

113

71

q

18

12



50

32

2

82

52

R

114

72

r

19

13

 

51

33

3

83

53

S

115

73

s

20

14

 

52

34

4

84

54

T

116

74

t

21

15

 

53

35

5

85

55

U

117

75

u

22

16



54

36

6

86

56

V

118

76

v

23

17



55

37

7

87

57

W

119

77

w

24

18



56

38

8

88

58

X

120

78

x

25

19



57

39

9

89

59

Y

121

79

y

26

1A



58

3A

:

90

5A

Z

122

7A

z

27

1B

 

59

3B

;

91

5B

[

123

7B

{

28

1C



60

3C

<

92

5C

\

124

7C

|

29

1D



61

3D

=

93

5D

]

125

7D

}

30

1E

-

62

3E

>

94

5E

^

126

7E

~

31

1F

63

3F

?

95

5F

_

127

7F



表1.4中很多字符都是无法显示的,所以以空白显示。在编码中,可以通过反斜杠“\”与ASCII字符的十六进制数结合的方式使用字符。例如,“\n”与“\0D”起到的作用是一致的。但是大多数字符可以直接输出,不需要使用此种方式。

避免转义字符——@

在编程中,有时候字符的组合恰巧与转义字符相同,此时就需要使该组合中的转义字符失效。C#中有一个特殊的字符 “@”,该字符的作用是声明原义字符串,忽略转义字符的作用。

【示例1-6】假如想要表示一个地址“c:\temp”。当我们在代码中输出“c:\temp”时,显示结果如下:

c:        emp

为什么会显示这样的一个结果呢?因为在“c:\temp”中,字符串中的“\t”被计算机识别成了转义字符,因此起的作用是水平制表符。在这种情况下,可以使用转义字符“\\”将反斜杠输出,让该字符串表示一个地址,表示方式为:

"c:\\temp"

这样的表示方式可以暂时解决眼前的简单的地址。但是,如果想要表示的地址很长很复杂,里面包含多个反斜杠时,这种书写方式就会非常繁琐。例如,需要表示的地址为“c:\temp\1\t\3\a\5”时,使用这种方式表示出来为:

"c:\\temp\\1\\t\\3\\a\\5"

上述这种表示方式非常繁琐,容易书写错误。因此,可以使用特殊符号@来屏蔽转义字符的作用。当我们想表示地址“c:\temp\1\t\3\a\5”时,只需要在地址前面加上特殊字符@即可,表示方式如下:

@"c:\temp\1\t\3\a\5"

字符串长度

上面我们学习了字符、字符串、转义字符等,接着我们来了解它们各自的字符长度。各种字符和字符串的类型、示例、长度及输出结果具体如表1.5所示:

表1.5  字符串长度

类型

字符/字符串示例

长度

实际含义

普通字符

'a'

1

a

普通字符串

"abc"

3

abc

带单引号的字符串

"ab\'c"

4

ab'c

带控制代码的字符串

"ab\nc"

4

ab

c

带ASCII表示的字符串

"ab\x22"

3

ab"

使用@的字符串

@"ab\x22"

6

ab\x22

C#语法文本字面量的更多相关文章

  1. C#语法浮点型字面量

    C#语法浮点型字面量 小数是生活中经常使用的一种数据表示形式.我们日常使用的5.5.0.6都是小数.在编程语言中,这种数据表示方式被称为浮点型数.浮点型数由整数部分.小数部分和小数点组成.浮点型字面量 ...

  2. [Effective JavaScript 笔记]第52条:数组字面量优于数组构造函数

    js的优雅很大程序要归功于程序中常见的构造块(Object,Function及Array)的简明的字面量语法.字面量是一种表示数组的优雅方法. var a=[1,2,3,5,7,8]; 也可以使用构造 ...

  3. JavaScript模式:字面量和构造函数

    本篇主要讨论了通过字面量以构造对象的方法,比如对象.数组以及正则表达式等字面量的构造方法,同时还讨论了与类似Object()和Array()等内置构造函数相比,为什么基于字面量表示法是更为可取. 对象 ...

  4. Effective Objective-C 2.0 — 第三条:多用字面量语法,少用与之等价的方法

    第三条:多用字面量语法,少用与之等价的方法 几个类:NSString  NSNumber  NSArray  NSDictionary 字面量语法是一种语法糖(syntactic sugar) NSS ...

  5. BLOCK/字面量(语法糖)OC——第六天

    1.//block ,块语法,实质是匿名函数,是对C语言中函数的扩充,扩展: //block  语法可以用来保存一段代码或者用来调用一段封装好的代码: //block  语法由于是C语言实现的,所以执 ...

  6. Objective-C字面量语法总结

    通常情况下,创建数组,字典的时候需要写一些很长的方法名,今天就总结一下如何使用字面量语法代替这些方法. 1.数值的创建 NSNumber *number1 = [NSNumber numberWith ...

  7. Vue 字面量语法 vs 动态语法

    初学者常犯的一个错误是使用字面量语法传递数值: <!-- 传递了一个字符串 "1" --> <comp some-prop="1">&l ...

  8. JS基础语法---创建对象---三种方式创建对象:调用系统的构造函数;自定义构造函数;字面量的方式

    创建对象三种方式: 调用系统的构造函数创建对象 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象) 字面量的方式创建对象 第一种:调用系统的构造函数创建对象 //小苏举例子: //实例化对 ...

  9. JavaScript 语法——字面量,变量,操作符,语句,关键字,注释,函数,字符集

    JavaScript 是一个程序语言. 语法规则定义了语言结构. 它是一个轻量级,但功能强大的编程语言.   ㈠JavaScript 字面量 在编程语言中,一般固定值称为字面量,如 3.14. ⑴数字 ...

随机推荐

  1. 在EF6.0中打印数据库操作日志

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. HDU 2391 Filthy Rich (dp)

    题目连接 Problem Description They say that in Phrygia, the streets are paved with gold. You're currently ...

  3. win7.wifi热点

    使用本地连接上网,将网卡设为wifi热点 cmd 管理员身份运行 netsh wlan set hostednetwork mode=allow ssid=4Gtest key=12345678 网络 ...

  4. node.js、git、bootstrap等安装配置

    纯记录 一,安装node.js 1 官方网址 http://nodejs.org/  点击install 下载node-v0.10.22-x86.msi 2 安装,修改安装目录到d盘,一路next,无 ...

  5. linux调试工具glibc的演示分析

    偶然中发现,下面的两端代码表现不一样 void main(){ void* p1 = malloc(32);       free(p1); free(p1); // 这里会报double free ...

  6. win7 64位mysql安装及navicat 解压版

    教程:http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html Mysql修改设置root密码的命令及方法:http://jingy ...

  7. js如何查看元素类型

    <script type="text/javascript"> //定义变量temp var temp = Object.prototype.toString.appl ...

  8. spring学习之一概念

    概念 1.是开源的轻量级框架 2.是一站式框架,就是说在java ee的三层结构中,每一层它都提供了不同的解决技术 web层:springMVC servoce层:spring IOC ,控制反转,通 ...

  9. Git 撤销操作、删除文件和恢复文件

    大致介绍 经过前面的学习,已经建立了版本库,并上传了文件,这次来学习对这些文件进行基本的操作,即: ◆ 撤销操作 ◆ 删除文件 ◆ 恢复文件 我在此之前,已经将三个文件提交到了版本库 撤销操作 撤销操 ...

  10. InnoDB 锁

    参看文章: innodb的意向锁有什么作用? 2.<MySQL技术内幕:InnoDB存储引擎> InnoDB存储引擎中的锁 InnoDB中的锁介绍 InnoDB存储引擎既支持行级锁,也支持 ...