2.3Ruby类型之字符串(String)

1.单引号字符串

str = '这是字符串'

单引号字符串只支持转义反斜线(\)和单引号('),不支持其余转义。

单引号字符串支持跨多行编写一行代码,但是不支持使用反斜线(\)转义行尾的换行符使之连续成一行显示。

单引号字符串不支持字符串插值。

s1 = 'This is a long string literal
that includes a backslash and a newline'

s2 = 'This is a long string literal \
that includes a backslash and a newline'

puts s1,s2

#输出
This is a long string literal
that includes a backslash and a newline
This is a long string literal \
that includes a backslash and a newline

2.双引号字符串

str = "这是字符串"

双引号字符串不仅支持转义反斜线(\)、单引号(')、双引号("),还支持其余转义。

双引号字符串支持跨多行编写一行代码,支持使用反斜线(\)转义行尾的换行符使之连续成一行显示。

双引号字符串支持字符串插值。

s1 = "This is a long string literal
that includes a backslash and a newline"

s2 = "This is a long string literal \
that includes a backslash and a newline"

puts s1,s2

#输出
This is a long string literal
that includes a backslash and a newline
This is a long string literal that includes a backslash and a newline
转义序列描述
\a响铃,ASCII 07h (BEL)
\b退格,ASCII 08h (BS)
\e转义,ASCII 1Bh (ESC)
\f换页,ASCII 0Ch (FF)
\n换行,ASCII 0Ah (LF)
\r回车,ASCII 0Dh (CR)
\s空格,ASCII 20h (SPC)
\t水平制表符,ASCII 09h (TAB)
\v垂直制表符,ASCII 0Bh (VT)
\\反斜杠(\)
\”双引号("")
\’单引号('')
\#井号
\#{井号 + 左括号
\#$井号 + 代表全局变量的美元符号
\#@@井号 + 代表类变量的两个at符号
\#@井号 + 代表实例变量的at符号
\nnn八进制位模式,其中NNN为1-3个八进制数字([0-7])
\xnn十六进制位模式,其中nn为1-2个十六进制数字([0-9a-fA-F])
\unnnnUnicode 字符(4个十六进制数字)。nnnn 代表了 0000 到 FFFF 之间的 Unicode 字符码点,每个 n 都是一个十六进制数,字母不区分大小写。
\u{十六进制数字}Unicode 字符(1 到 6 个十六进制数字)。花括号内的十六进制数字代表了 0 到 10FFFF 之间的 Unicode 字符码点,字母不区分大小写。这是另一种 Unicode 字符的表达方式,非取代上面的 \unnnn
\cx 或 \C-x控制字符,其中x是ASCII可打印字符
\M-x元字符,其中x是ASCII可打印字符
\M-\C-x 或 \C-\M-x 或 \M-\cx 或 \c\M-x元控制字符,其中x是ASCII可打印字符
\c? 或 \C-?删除,ASCII 7Fh (DEL)

3.反引号字符串

反引号字符串会被当作双引号字符串来处理,反引号内的值会被传递给一个特殊的名为 Kernel.` 的方法,该方法会将该值作为一个操作系统 shell 命令来执行,并且将该命令的输出作为字符串返回。

`ls`

可以使用下面的语法代替反引号。

%x[ls]

4.带分界符的字符串

带分界符的字符串,又被称为“百分比字符串”。

当一个字符串被引入到另一个字符串的时候,应该是不麻烦的一件事,但是当一个字符串内含有单引号或双引号的时候,我们需要手动转义单引号或双引号,这是比较繁琐的一件事,此时可以使用带分界符的字符串完成自动转义单引号或双引号。

%q 开头的字符串遵循单引号引用字符串的规则。以 %Q(或 %) 开头的字符串遵循双引号引用字符串的规则。无论是 %q,还是 %Q(或 %),最终结果都是双引号字符串。

紧跟在 qQ 后面的第一个字符是该字符串的分界符,从该分界符后的第一个字符到下一个对应的分界符之间的内容就组成了该字符串。

%q(字符串)
%Q(字符串)
%(字符串)

分界符支持各种各样的分界符,但是起始分界符必须与结束分界符相对应,比如起始分界符为 ([{<,那么与之相对应的分界符必须是 )]}>

#示例
%q(Don't worry about escaping ' characters!)

%Q|"How are you?", he said|

%-This string literal ends with a newline\n-

5.字符(Character)

可以通过在单个字符(Character)前加一个问号的方式来表示字符字面量,不需要添加额外的引号。

字符实际上是长度为 1 的字符串。

#字符A,等同于'A'
?A
#字符双引号
?"
#字符问号
??

另外,?后面还支持各种转义序列。

?\t
?\u20AC

6.访问字符串中的字符

#访问字符(正数索引从左往右从0开始,负数索引从右往左从-1开始)
b = s[索引]

#添加或更改字符
s[索引] = "字符串"

#删除字符
s[索引] = ""

7.访问字符串中的子字符串

7.1[索引,长度]方式

可在方括号里使用两个由逗号分隔的操作数即可,第一个操作数是索引(可以为负索引),第二个操作数是子字符串长度。结果是一个从指定索引开始,包含指定数量的字符的子字符串。

s[索引,长度]
#访问字符(正数索引从左往右从0开始,负数索引从右往左从-1开始)
b = s[索引,长度]

#添加或更改字符
s[索引,长度] = "字符串"

#删除字符
s[索引,长度] = ""

7.2[范围]方式

#访问字符(正数索引从左往右从0开始,负数索引从右往左从-1开始)
b = s[起始整数..结束整数]
b = s[起始整数...结束整数]

#添加或更改字符
s[起始整数..结束整数] = "字符串"
s[起始整数...结束整数] = "字符串"

#删除字符
s[起始整数..结束整数] = ""
s[起始整数...结束整数] = ""

8.索引为字符串

一个字符串的索引也可以是字符串,如果目标字符串里含有和索引字符串相匹配的子字符串时,那么第一个匹配的子字符串将会被返回,否则返回 nil

b = s["字符串"]

s["字符串"] = "新字符串"
#示例
s = "hello"
while(s["l"])
  s["l"] = "L"
end

#输出
heLLo

9.字符串长度

str.length
str.size

10.字符串重复(Repetition)

"Ruby! " * 3

#输出
"Ruby! Ruby! Ruby! "

11.字符串追加

greeting = "Hello"
greeting << " " << "World"
puts greeting

#输出
Hello World

12.字符串连接(Concatenation)

#方式一:解释器会自动连接相邻的字符串
"con"  "cat"  "en"  "at"  "ion"

#输出
"concatenation"
#方式二:字符串 + 连接符
hello = "Hello,"
world = "World!"
str = hello + world

#输出
"Hello,World!"

13.字符串插值(Interpolation)

#{表达式}

如果表达式是全局变量、类变量、实例变量的时候,花括号可以被省略。

#$a
#@@a
#@a
//示例
x = 10
y = 20
z = 30
area = (x*y + y*z + z*x) * 2
   
puts "表面积 = #{area}"     

14.格式化字符串(Format String)

与字符串插值(Interpolation)的区别在于,格式化字符串(Format String)提供了很多选项,可以将表达式运算好的值按照一定格式插入到字符串中。

#表示一个Float对象可以显示多少位小数
#方式一(sprintf方法)
sprintf("pi is about %.4f", Math::PI)
#方式二(%操作符)
"pi is about %.4f" % Math::PI

#都输出
"pi is about 3.1416"
#输出 "pi: 3.141593"
"%s: %f" % ["pi", Math::PI]

#输出 "3 rubies"
"%d %s" % [3, "rubies"]

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubylang/1583.html

(0)
上一篇 2023年1月3日 20:20
下一篇 2023年1月4日 23:39

相关推荐

  • 1.6Ruby语言的常量(Constant)

    1.常量声明 2.常量分类 常量没有实例常量和局部常量。 2.1全局常量 名称 描述 全局常量 定义在模块或类之外的常量,即为 Object 类的私有常量。 2.2成员常量 名称 描述 模块常量 定义在模块体中,但在模块体中的所有方法外的常量。 类常量 定义在类体中,但在类体中的所有方法外的常量。 3.赋值方式 除了赋…

    Ruby语言教程 2022年12月6日
    0530
  • 2.1Ruby语言的模块(Module)

    模块是类变量、常量、类方法、实例方法的集合。 1.模块声明 module 关键字除了定义一个新模块外,还创建了一个常量名为新模块名的全局常量,用于常量引用表达式从而来引用此新模块。 模块与模块之间支持相互嵌套,模块与类之间支持相互嵌套。 2.模块用于命名空间(Namespace) 模块用于命名空间,可以解决标识符冲突的…

    Ruby语言教程 2023年1月1日
    08150
  • 2.2Ruby类型之类(Class)

    1.类声明 class 关键字除了定义一个新类外,还创建了一个常量名为新类名的全局常量,用于常量引用表达式从而来引用此新类。 类与类之间支持相互嵌套。 2.继承 Ruby 语言只提供单继承,就是说一个子类不可以继承多个父类,只可以继承一个父类,可以使用模块从而支持多继承。 如果类声明时不指定父类,那么它隐式地继承自 O…

    Ruby语言教程 2023年1月2日
    08530

发表回复

登录后才能评论