字符串

字符串对象持有有序的字节序列,通常是字符,通常形成人类可读的文本片段。它们在所有编程语言中都是非常常见的对象类型,Ruby有许多高级和一些低级方法来创建、访问和操作字符串对象。...

字符串对象持有有序的字节序列,通常是字符,通常形成人类可读的文本片段。它们在所有编程语言中都是非常常见的对象类型,Ruby有许多高级和一些低级方法来创建、访问和操作字符串对象。

Over shoulder close up of male office worker looking at laptop in office

字符串通常使用字符串文本创建。文本是Ruby语言中创建特定类型对象的特殊语法。例如,23是一个创建​Fixnum对象。至于字符串文字,有几种形式。

单引号和双引号字符串

大多数语言都有一个类似于此的字符串文本,因此这可能很熟悉。引号类型“,”(单引号、撇号或硬引号)和“(双引号或软引号)用于括起字符串文字,它们之间的任何内容都将转换为字符串对象。下面的示例演示了这一点。

但是单引号和双引号之间有一些区别。双引号或软引号使一些魔术发生在幕后。最有用的是字符串内部的插值,用于将变量的值插入字符串的中间。这是通过使用#{…}序列实现的。下面的示例将询问您的姓名并问候您,使用插值将您的姓名插入打印的字符串文字中。

请注意,任何代码都可以放在大括号内,而不仅仅是变量名。Ruby将对代码进行求值,无论返回什么,它都将尝试将其插入字符串中。因此,您可以简单地说“Hello,#{gets.chomp}”,然后忘记name变量。但是,最好不要在大括号中放长表达式。

单引号、撇号或硬引号的限制性要大得多。在单引号内,Ruby除了转义单引号字符和反斜杠本身(\'和\\)之外,不会执行任何插值或转义序列。如果不打算使用插值,建议更频繁地使用单引号。

以下示例将尝试在单引号内插入变量。

如果你运行这个,你不会得到任何错误,但是会打印什么?

插值序列被意外地传递。

什么时候应该使用单引号和双引号

这是风格问题。有些人喜欢使用双引号,除非他们变得不方便。其他人宁愿使用单引号,除非有意使用插值行为。一直使用双引号本身并没有什么危险,但它确实使一些代码更易于阅读。如果您知道字符串中没有插值,那么在通读代码时不需要读取字符串,因为您知道字符串本身不会有任何副作用。所以,您使用哪种字符串文字形式取决于您,这里没有真正的对错方法。

逃逸序列

如果在字符串文字中,您希望包含引号字符,该怎么办?例如,字符串“Steve said”Moo!“不起作用。也不会‘不能碰这个!”。这两个字符串都包含字符串中的引号字符,有效地结束字符串文字并导致语法错误。您可以切换引号字符,如‘Steve said’Moo!“,但这并不能真正解决问题。相反,您可以转义字符串中的任何引号字符,它将失去其特殊含义(在本例中,特殊含义是关闭字符串)。

要转义字符,请在其前面加上反斜杠字符。反斜杠字符告诉Ruby忽略下一个字符可能具有的任何特殊含义。如果是匹配的引号字符,则不要结束字符串。如果是散列符号,不要启动插值块。下面的示例演示如何使用反斜杠转义特殊字符。

反斜杠字符可用于删除以下字符中的任何特殊含义,但令人困惑的是,它也可用于表示双引号字符串中的特殊行为。大多数这些特殊行为都与插入字符和字节序列有关,而这些字符和字节序列不能被键入或直观地表示。并非所有字符串都是字符串,或者可能包含针对终端而非用户的控制序列。Ruby使您能够使用反斜杠转义字符插入这些类型的字符串。

  • \n-换行符。PUT方法自动执行此操作,但是如果希望在字符串的中间插入一个字符串,或者该字符串命中的是PUT方法以外的其他内容,则可以使用此方法在字符串中插入换行符。
  • \t-制表符。制表符将光标移动到(在大多数终端上)8的倍数,因此这对于显示表格数据非常有用。然而,有更好的方法可以做到这一点,而且使用制表符被认为有点过时或有点刻薄。
  • \nnn-后跟3个数字的反斜杠将表示由3个八进制数字表示的ASCII字符。为什么是八进制?主要是出于历史原因。
  • \xnn-一个反斜杠、一个x和两个十六进制数字。与八进制版本相同,仅使用十六进制数字。

您可能永远不会使用其中的大多数,但要知道它们是存在的。还要记住,它们只在双引号字符串中工作。

下一页将讨论多行字符串和字符串文字的替代语法。

多行字符串

大多数语言不允许多行字符串文字,但Ruby允许。无需结束字符串并为下一行追加更多字符串,Ruby可以使用默认语法处理多行字符串文本。

交替语法

与大多数其他文字一样,Ruby为字符串文字提供了另一种语法。例如,如果在文本中使用了大量引号字符,则可能需要使用此语法。当您使用这种语法是风格问题时,字符串通常不需要它们。

要使用替代语法,请对单引号字符串%q{…}使用以下序列。同样,对双引号字符串%Q{…}使用以下语法。这种替代语法遵循与它们的“普通”同类相同的规则。另外,请注意,您可以使用任意字符,而不是大括号。如果使用大括号、方括号、角括号或圆括号,则匹配字符将以文字结尾。如果不想使用匹配的字符,可以使用任何其他符号(字母或数字以外的任何符号)。文字将用另一个相同符号的符号关闭。下面的示例显示了使用此语法的几种方法。

备用语法也可用作多行字符串。

  • 发表于 2021-09-21 20:08
  • 阅读 ( 195 )
  • 分类:编程

你可能感兴趣的文章

字符串缓冲区(string stringbuffer)和java中的stringbuilder(stringbuilder in java)的区别

...er与stringbuilder String、StringBuffer和stringbuilder是Java中的类。字符串在Java编程中被广泛使用。一旦创建了字符串对象,就不可能更改它们。每次字符串发生更改时,它都会创建一个新字符串。即使是连接到现有字符串,它也会创建...

  • 发布于 2020-10-02 19:22
  • 阅读 ( 316 )

学习python?下面是如何操作字符串

使用Python可以通过多种方式操纵字符串。Python提供了各种函数、操作符和方法,可以用来操作字符串。您可以分割一个字符串,连接两个或多个字符串,在字符串中**变量,等等。 ...

  • 发布于 2021-03-11 10:21
  • 阅读 ( 335 )

如何使用这9个函数在php中操作文本

字符串是许多编程语言(包括PHP)中的基本标量类型之一。它们表示从单个字符到整个文档的文本数据。 ...

  • 发布于 2021-03-27 01:14
  • 阅读 ( 240 )

如何在linux上使用strings命令

...。它的目的是什么?是否有指向列出二进制文件中可打印字符串的命令的点? 让我们后退一步。诸如程序文件之类的二进制文件可以包含人类可读文本的字符串。但是你怎么才能看到他们呢?如果你使用cat或更少,你很可能会...

  • 发布于 2021-04-03 09:27
  • 阅读 ( 271 )

如何在firefox中更改用户代理字符串

你需要一个快速的方法来改变Firefox**定网站的用户代理字符串吗?使用User Agent Switcher扩展从预设列表(或自定义条目)中选择所需的字符串。 注意:适用于Firefox、Flock、SeaMonkey和Songbird。 之前 在将扩展添加到浏览器之前,我们...

  • 发布于 2021-04-13 14:18
  • 阅读 ( 227 )

更改internet explorer 8中的用户代理字符串

使用Internet Explorer 8浏览时是否需要按需切换用户代理字符串?如果是这样的话,那么您将需要看看UAPick用户代理切换器。 用户代理字符串将标识您的浏览器和系统详细信息,以标识您要访问的站点。它将标识您的浏览器、版本...

  • 发布于 2021-04-13 14:36
  • 阅读 ( 115 )

数组(array)和一串(string)的区别

...主要区别在于数组可以具有任何长度的任何数据类型,而字符串通常是以空字符“\0”结尾的ASCII字符。两者在不同编程语言中的实现方式都有很大的不同。数组和字符串在java中的工作方式与C++中的工作方式非常不同。本文介绍...

  • 发布于 2021-06-25 10:17
  • 阅读 ( 1397 )

无效的(null)和空的(empty)的区别

...于,null用于表示nothing,而empty用于表示长度为零的唯一字符串。 字符串是指一系列字符。例如,“programming”是一个字符串。Java编程语言支持字符串,并将其视为对象。字符串类是不可变的。因此,在创建对象之后,它不能被...

  • 发布于 2021-06-30 22:17
  • 阅读 ( 1179 )

数组(array)和一串(string)的区别

数组和字符串的主要区别在于,数组是一种数据结构,它存储一组相同数据类型的元素,而字符串是一组字符。 C等编程语言支持数组和字符串。数组是一种固定大小的数据结构,用于存储属于同一类型的数据元素。它是可以访...

  • 发布于 2021-07-01 16:24
  • 阅读 ( 446 )

性格(character)和一串(string)的区别

字符和字符串的主要区别在于,字符是指单个字母、数字、空格、标点符号或可以用计算机表示的符号,而字符串是指一组字符。 在C编程中,我们可以使用char数据类型来存储字符和字符串值。此外,ASCII和扩展ASCII标准定义了...

  • 发布于 2021-07-01 16:30
  • 阅读 ( 211 )
to850o11q805
to850o11q805

0 篇文章

相关推荐