如何在 Ruby 中使用字符串方法

2023-11-19

介绍

Ruby strings有许多内置方法可以轻松修改和操作文本,这是许多程序中的常见任务。

在本教程中,您将使用字符串方法来确定字符串的长度、索引和拆分字符串以提取子字符串、添加和删除空格和其他字符、更改字符串中字符的大小写以及查找和替换文本。完成后,您将能够将这些方法合并到您自己的程序中。

确定字符串长度

字符串方法length返回字符串中的字符数。当您需要强制执行最小或最大密码长度,或者将较大的字符串截断到一定限制内以用作缩写时,此方法非常有用。

这是一个打印句子长度的示例:

open_source = "Sammy contributes to open source."
print open_source.length
Output
33

请记住,每个字符(包括字母、数字、空白字符和符号)都会被计算在内,因为它是字符串的一部分。

要检查字符串是否为空,可以检查其长度是否为0,或者您可以使用empty? method:

name = ""
name.empty? # true

name = "Sammy"
name.empty? # false

name = " "
name.empty? # false

让我们看看如何索引字符串并访问字符串的内容。

访问字符串中的字符

要打印或处理字符串中的某些字符,请使用slice获得您想要的部分的方法。

Like arrays,其中每个元素对应一个索引号,字符串的每个字符也对应一个索引号,从索引号0开始。

对于字符串Sammy索引细分如下:

0 1 2 3 4
S a m m y

The slice方法允许您抓取单个字符或一系列字符。传递单个整数将返回该索引处的字符。传递两个整数,用逗号分隔,告诉slice返回从第一个索引到最后一个索引(含)的所有字符。这slice方法还接受一个范围,例如1..4,指定要提取的字符:

"Sammy".slice(0) # "s"
"Sammy".slice(1,2) # "am"
"Sammy".slice(1..4) # "ammy"

The []语法是一个别名slice,所以你可以像数组一样对待字符串:

"Sammy"[0] # "s"
"Sammy"[1,2] # "am"
"Sammy"[1..4] # "ammy"

您还可以使用负索引访问字符串末尾的单个字符。-1会让你访问字符串的最后一个字符,-2将访问倒数第二个,依此类推。

最后,您可以使用以下命令将字符串转换为字符数组chars method:

"sammy".chars # ["S", "a", "m", "m", "y"]

这对于操作或转换字符串中的字符非常有用。

接下来,让我们看看如何更改字符串中字符的大小写。

转换为大小写

The upcase and downcase方法返回一个字符串,其中原始字符串的所有字母都转换为大写或小写字母。字符串中任何非字母的字符都不会被更改。

我们来转换一下字符串Sammy Shark全部大写:

name = "Sammy Shark"
print name.upcase
Ouput
SAMMY SHARK

现在,让我们将字符串转换为全部小写:

print name.downcase
Ouput
sammy shark

The upcase and downcase通过使大小写始终保持一致,函数可以更轻松地评估和比较字符串。例如,如果您要求输入用户名,并且用户输入了大写字母的用户名,您可以将用户的输入小写,并将其与小写的已知值进行比较。

Ruby 字符串也有一个capitalize返回第一个字符大写的新字符串的方法:

"sammy".capitalize # "Sammy"

这是一种方便的方法,但要小心使用方法;它只将第一个字母大写,因此它可能并不总是适合您需要的用例。

Ruby 还提供了swapcase返回大小写交换的字符串的方法:

text = "Sammy"
print text.swapcase
sAMMY

The downcase, upcase, captalize and swapcase方法都返回一个新字符串并保持现有字符串不变。如果您要做的事情不是立即打印文本,记住这一点很重要。看一下下面的例子:

text = "sammy"
text.capitalize

print "Hello, #{text}!"
Output
Hello, sammy!

尽管我们打电话capitalize on the text变量,我们从未捕获过返回的值capitalize。我们需要像这样重写程序:

text = "sammy"
text = text.capitalize

print "Hello, #{text}!"
Output
Hello, Sammy!

您可以使用downcase!, upcase!, capitalize! and swapcase!改为修改原始字符串:

text = "sammy"
text = text.capitalize!

print "Hello, #{text}!"

不过要小心。改变原始字符串有一些缺点。 Ruby 提供了这两种方法,因此您可以选择适合您需要的一种。

现在让我们在字符串中添加和删除空格。

填充和剥离字符串

如果您正在编写一个必须格式化某些文本的程序,您经常会发现需要在字符串前面、后面或周围添加一些空格,以便使其与其他数据对齐。有时,您可能希望从字符串的开头或结尾删除不必要的字符,例如多余的空格或特殊字符。

要使用空格包围字符串,请使用center method:

"Sammy",center(21) # " Sammy "

如果您想使用不同的字符,可以指定一个字符串作为第二个参数:

" [Sammy] ".center(21, "<>") # "<><><> [Sammy] <><><>"

The ljust and rjust方法在字符串的左侧或右侧添加空格或字符,其工作方式与center method:

"Sammy".ljust(20) # "Sammy "
"Sammy".rjust(20) # " Sammy"
"Sammy".rjust(20, "!") # "!!!!!!!!!!!!!!!Sammy"

要从字符串中删除前导空格,请使用rstrip方法。要删除尾随空格,请使用lstrip. Use strip删除前导和尾随空格:

" Sammy".rstrip # "Sammy"
"Sammy ".lstrip # "Sammy"
" Sammy ".strip # "Sammy"

您可以使用center!, ljust!, rjust!, lstrip!, rstrip!, and strip!方法修改原始字符串。

有时您需要从字符串末尾删除字符。红宝石的chop方法就是这样做的;它从字符串中删除最后一个字符:

"Sammy".chop # "Samm"

这对于删除换行符特别有用(\n) 来自字符串:

"This string has a newline\n".chop

The chop方法保持原始字符串不变,返回一个新字符串。这chop!方法就地修改现有字符串。

The chomp方法可以从字符串末尾删除多个字符:

"Sammy".chomp("my") # "Sam"

如果您没有指定要删除的字符串,chomp将删除换行符:

"This string has a newline\n".chomp # "This string has a newline

但是,如果字符串不包含换行符,chomp只返回原始字符串:

"Sammy".chomp # "Sammy"

这使得chomp删除换行符时使用比使用更安全chop方法,它总是删除最后一个字符。

红宝石有一个chomp!改变原始字符串的方法,如果执行了替换,则返回修改后的字符串。然而,与chomp, the chomp!方法返回nil如果它没有改变字符串:

string = "Hello\n"
string.chomp! # "Hello"

string = "Hello"
string.chomp! # nil

接下来,我们看看如何在字符串中搜索文本。

查找字符和文本

有时您需要确定一个字符串是否包含另一个字符串。

The include?方法检查一个字符串是否包含另一个字符串。它返回true如果字符串存在并且false if not:

"Sammy".include?("a") # true
"Sammy".include?("b") # false

The index方法返回字符的索引。它还可以识别子字符串第一个字符的索引。它返回nil如果字符或子字符串不存在:

"Sammy".index("a") # 1
"Sammy".index("mm") # 2
"Sammy".index("Fish") # nil

The index但方法只能找到第一次出现的情况。这是一个较长字符串的示例:

text = "Sammy has a balloon"
text.index("a") # 1

字符串Sammy has a balloon字母“a”出现了四次。但index只找到第一个出现的地方。您必须编写更具体的内容才能找到其他事件之一。

例如,您可以将字符串转换为字符数组并使用数组方法迭代结果并选择字符的索引。这是执行此操作的一种方法:

text = "Sammy has a balloon"
indices = text.chars
.each_with_index
.select{|char, index| char == "a" }
.map{|pair| pair.last}

print indices
[1, 7, 10, 13]

each_with_index返回一个二维数组,其中包含每个字符的条目及其索引。select将其缩减为仅包含角色所在的条目a, and map将二维数组转换为索引的一维数组。

除了查找字符串中的字符之外,您还可以使用以下命令检查字符串是否以字符或子字符串开头start_with? method:

text = "Sammy has a balloon"
text.start_with?("s") # true
text.start_with?("Sammy has" # true

The start_with?方法接受多个字符串,如果其中任何一个匹配,则返回 true:

text = "Sammy has a balloon"
text.start_with?("Sammy the Shark", "Sammy") # true

在此示例中,未找到“Sammy the Shark”,但找到了“Sammy”,因此返回值为true.

您可以使用end_with?方法查看字符串是否以给定子字符串结尾。它的工作原理完全一样start_with?:

text = "Sammy has a balloon"
text.end_with?("balloon") # true
text.end_with?("boomerang") # false
text.end_with?("boomerang", "balloon") # true

我们已经研究了查找文本的方法,所以让我们看看如何用不同的文本替换该文本。

替换字符串中的文本

文字处理程序中的查找和替换功能可让您搜索字符串并将其替换为另一个字符串。您可以在 Ruby 中使用以下命令来做到这一点sub and gsub方法。

The sub方法将字符串的一部分替换为另一个字符串。

萨米不再拥有气球了;它飞走了。让我们改变子字符串"has" to "had".

balloon = "Sammy has a balloon"
print balloon.sub("has","had")

我们的输出将如下所示:

Ouput
Sammy had a balloon.

The sub方法仅用新文本替换第一次出现的匹配项。让我们使用一个修改后的字符串,该字符串出现两次has:

balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.sub("has","had")
Output
Sammy had a balloon. The balloon has a ribbon

只有第一次出现发生了变化。

要全部更改,请使用gsub方法,该方法执行global代换:

balloon = "Sammy has a balloon. The balloon has a ribbon"
print balloon.gsub("has","had")
Output
Sammy had a balloon. The balloon had a ribbon

The sub and gsub方法总是返回新字符串,而不修改原始字符串。让我们通过将字符串中的“balloon”更改为“boomerang”来演示这一点:

text = "Sammy has a balloon"
text.gsub("ballooon", "boomerang")
print text
Output
Sammy has a balloon

输出没有显示我们正在寻找的结果,因为虽然我们确实指定了替换,但我们从未分配过结果gsub到一个新变量。为了得到我们想要的结果,我们可以像这样重写程序:

text = "Sammy has a balloon"
text = text.sub("ballooon", "boomerang")
print text

或者,您可以使用sub!相反,它会修改原始字符串。让我们通过进行一些字符串替换来尝试一下。我们将“红色气球”更改为“蓝色回旋镖”:

text = "Sammy has a red balloon"
text.sub!("red", "blue")
text.sub!("balloon", "boomerang")
print text
Output
Sammy has a blue boomerang

您可以使用gsub!方法也可以就地进行全局替换。

The sub and gsub方法接受常用表达对于搜索模式。让我们将字符串中的所有元音替换为@ symbol:

"Sammy has a red balloon".gsub(/[aeiou]/, "@")
"S@mmy h@s @ r@d b@ll@@n"

替换值不必是字符串。您可以使用散列来指定应如何替换单个字符或片段。让我们替换所有出现的字母a with @和所有的o带零的字符:

"Sammy has a red balloon".gsub(/[aeiou]/, {"a" => "@", "o" => "0"})
# "S@mmy h@s @ rd b@ll00n"

您可以使用它以更少的代码执行更复杂的替换。

结论

在本教程中,您使用字符串数据类型的一些内置方法来处理和操作字符串。您还了解到,许多处理字符串的方法有两种变体:一种使字符串保持不变,另一种修改原始字符串。

您使用哪一种取决于您的需要。 Ruby 使您可以灵活地选择如何处理数据。但是,编写不修改现有数据的代码可以更轻松地在以后进行调试。

请务必查看这些相关教程,以继续探索如何在 Ruby 中处理数据:

  • 如何在 Ruby 中使用字符串
  • 如何在 Ruby 中使用数组
  • 了解 Ruby 中的数据类型
  • 如何在 Ruby 中使用数组方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中使用字符串方法 的相关文章

  • set up ovn development env (by quqi99)

    作者 xff1a 张华 发表于 xff1a 2022 07 08 版权声明 xff1a 可以任意转载 xff0c 转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 编译ovs并启动ovs vswitchd https docs
  • SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包“

    SDK 就是 Software Development Kit 的缩写 中文意思就是 软件开发工具包 让我想起当初OZO也有SDK
  • Webpack mode三种模式配置说明(production,development,none)

    我们都知道webpack的配置文件 webpack config js 文件中 mode 表示webpack当前的环境以及对不同的环境的配置 虽然官方文档写明了三种不同的模块的配置 xff0c 但是没有具体说明是什么意思 xff0c 我就注
  • linux kernel development中文版,Linux Kernel Development [PDF]

    The Linux kernel is one of the most important and far reaching open source projects That is why Novell Press is excited
  • windows software development kit是什么_Windows神器,让你用出Mac的感觉

    前言 Windows 10 觉得非常不适应 xff0c 总感觉没有 Mac OS 简洁 xff0c 漂亮 xff0c 这不是桌面 壁纸 图标的问题 最后想明白了 xff0c 问题出在字体上 因为Mac OS 的字体渲染比 Windows 的
  • Linux kernel development

    这几天一直在读经典的linux入门书 Linux kernel development 第三版即LKD xff0c 这是我第一次读英文版的技术书 xff0c 颇有些高兴 之所以读 xff0c 一是因为学过操作系统的理论知识 xff0c 想看
  • 理解 JavaScript 中的类

    介绍 JavaScript 是一种基于原型的语言 JavaScript 中的每个对象都有一个隐藏的内部属性 称为 Prototype 可用于扩展对象属性和方法 您可以在我们的文章中阅读有关原型的更多信息了解 JavaScript 中的原型和
  • 了解 JavaScript 中的原型和继承

    介绍 JavaScript 是一个基于原型的语言 这意味着对象属性和方法可以通过具有克隆和扩展能力的通用对象来共享 这称为原型继承 与类继承不同 在流行的面向对象编程语言中 JavaScript 相对独特 因为 PHP Python 和 J
  • 如何编写您的第一个 Ruby 程序

    介绍 你好 世界 程序是计算机编程中经典且历史悠久的传统 对于初学者来说 这是一个小而完整的第一个程序 并且是确保正确配置环境的好方法 本教程将引导您完成用 Ruby 创建该程序 但是 为了使程序更有趣 您将修改传统的 Hello Worl
  • 理解 Python 3 中的字典

    介绍 The 字典是Python内置的mapping类型 词典地图keys to values这些键值对提供了一种在 Python 中存储数据的有用方法 字典通常用于保存相关数据 例如 ID 或用户配置文件中包含的信息 字典的两侧都带有花括
  • 如何在 Java 中使用运算符

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 An operator是一个或多个符号的组合 比如著名的算术运算符减号 并加上 或更高级的instanceof 当您对值或变量应用运算符时 您会得到运算结果 此类操作是编程的基础 因为
  • 如何在Ubuntu 20.04服务器上安装Python 3并设置编程环境

    介绍 对于初学者和经验丰富的开发人员来说 Python 编程语言越来越受欢迎 Python 灵活且用途广泛 在脚本编写 自动化 数据分析 机器学习和后端开发方面具有优势 首次发布于 1991 年 其名称的灵感来自英国喜剧团体 Monty P
  • 如何使用 Python 调试器

    介绍 在软件开发中 调试是查找并解决阻止软件正常运行的问题的过程 Python调试器为Python程序提供了调试环境 它支持设置条件断点 一次一行单步执行源代码 堆栈检查等 先决条件 您应该在计算机或服务器上安装 Python 3 并设置编
  • 在 Python 3 中使用循环时如何使用 Break、Continue 和 Pass 语句

    介绍 Using for 循环 and while 循环Python 允许您以有效的方式自动化和重复任务 但有时 外部因素可能会影响程序的运行方式 发生这种情况时 您可能希望程序完全退出循环 在继续之前跳过循环的一部分 或者忽略该外部因素
  • 机器学习简介

    介绍 机器学习是人工智能 AI 的一个子领域 机器学习的目标通常是理解数据的结构并将该数据拟合到人们可以理解和利用的模型中 尽管机器学习是计算机科学的一个领域 但它与传统的计算方法不同 在传统计算中 算法是计算机用来计算或解决问题的显式编程
  • 如何在 Python 3 中构造 For 循环

    在计算机编程中使用循环使我们能够自动化并多次重复类似的任务 在本教程中 我们将介绍 Pythonfor loop A for循环基于循环计数器或循环变量实现代码的重复执行 这意味着for当进入循环之前已知迭代次数时 最常使用循环 这与whi
  • 如何在 Ruby 中使用数组

    介绍 An array是一个表示值列表的数据结构 称为elements 数组允许您在单个变量中存储多个值 在 Ruby 中 数组可以包含任何数据类型 包括数字 字符串和其他 Ruby 对象 这可以压缩和组织您的代码 使其更具可读性和可维护性
  • 如何修改 DOM 中的属性、类和样式

    介绍 在本教程之前的教程中series 如何更改 DOM 我们介绍了如何使用内置方法从文档对象模型 DOM 中创建 插入 替换和删除元素 通过提高操作 DOM 的熟练程度 您可以更好地利用 JavaScript 的交互功能并修改 Web 元
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • 如何访问 DOM 中的元素

    介绍 In 了解 DOM 树和节点中 我们回顾了 DOM 如何构建为称为节点的对象树 这些节点可以是文本 注释或元素 通常当我们访问 DOM 中的内容时 会通过 HTML 元素节点 为了能够自信地访问 DOM 中的元素 最好具备 CSS 选

随机推荐

  • 如何在 CentOS 8 上安装 Tomcat 9

    Apache Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 它是当今世界上采用最广泛的应用程序和 Web 服务器之一 Tomcat 使用简
  • 如何在 Debian 9 上安装 Asterisk

    Asterisk 是最流行且广泛采用的用于构建通信应用程序的开源框架 它被世界各地的个人 小型企业 大型企业和政府使用 Asterisk 功能包括电话会议 语音邮件 等待音乐 呼叫转接 呼叫排队 呼叫录音 数据库存储 检索等等 在本教程中
  • 如何在 CentOS 7 上安装 Minecraft 服务器

    我的世界 是有史以来最受欢迎的游戏之一 这是一款关于放置方块并进行冒险的沙盒视频游戏 在本教程中 我们将完成在 CentOS 7 上安装和配置 Minecraft 服务器所需的步骤 我们将使用 Systemd 来运行 Minecraft 服
  • 如何在 CentOS 7 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • Linux 中的 Tar 命令(创建和提取档案)

    The tar命令通过将一组文件转换为存档来创建 tar 文件 它还可以提取 tar 存档 显示存档中包含的文件列表 向现有存档添加其他文件以及各种其他类型的操作 Tar 最初设计用于创建档案以将文件存储在磁带上 这就是它得名 的原因 Ta
  • 如何在 Ubuntu 18.04 上启用 SSH

    Secure Shell SSH 是一种加密网络协议 用于客户端和服务器之间的安全连接 在本教程中 我们将向您展示如何在 Ubuntu 桌面计算机上启用 SSH 启用 SSH 将允许您远程连接到 Ubuntu 计算机并安全地传输文件或执行管
  • Spring Boot @SpringBootApplication,SpringApplication 类

    春季启动 SpringBootApplication注解 春季启动 SpringBootApplication注解用于标记一个配置类 该类声明了一个或多个 Bean方法和触发器auto configuration和组件扫描 这与声明一个类相
  • 如何在 Ruby 中使用字符串

    介绍 A string是一个或多个字符的序列 可以由字母 数字或符号组成 Ruby 中的字符串是对象 与其他语言不同 字符串是mutable 这意味着可以就地更改它们 而不用创建新字符串 您几乎会在编写的每个程序中使用字符串 字符串允许您使
  • 有用的 Bash 别名和函数简介

    介绍 在命令行上操作的越多 您就越会发现您使用的大多数命令只是可用命令的很小的子集 大多数任务都是习惯性的 您可能每天都以相同的方式运行这些任务 虽然许多最常见的命令实用程序的制造商试图通过使用缩写名称来消除无关的输入 想想通过输入 ls
  • 在 Ubuntu 14.04 上使用 Consul(服务发现系统)简介

    介绍 Consul是一个分布式 高可用 数据中心感知的服务发现和配置系统 它可用于在灵活而强大的界面中呈现服务和节点 使客户端始终能够了解其所属基础设施的最新视图 Consul 提供了许多不同的功能 用于提供有关您的基础设施的一致且可用的信
  • 如何在 Ubuntu 22.04 上使用 uWSGI 和 Nginx 为 Flask 应用程序提供服务

    介绍 在本指南中 您将使用FlaskUbuntu 22 04 上的微框架 本文的大部分内容将讨论如何设置uWSGI应用服务器以及如何启动应用程序和配置Nginx充当前端反向代理 先决条件 在开始本指南之前 您应该 安装了 Ubuntu 22
  • 如何使用 Nginx、Let's Encrypt 和 Docker Compose 保护容器化 Node.js 应用程序

    介绍 有多种方法可以增强您的灵活性和安全性Node js应用 用一个反向代理 like Nginx为您提供负载平衡请求 缓存静态内容和实施传输层安全 TLS 在服务器上启用加密 HTTPS 可确保与应用程序之间的通信保持安全 在容器上使用
  • Python 中的 numpy.append()

    Python numpyappend 函数用于合并两个数组 该函数返回一个新数组 原数组保持不变 NumPy append 语法 函数语法为 numpy append arr values axis None The arr可以是类似数组的
  • 如何使用 Apache 和 Nginx 创建临时和永久重定向

    介绍 HTTP 重定向或 URL 重定向是一种将一个域或地址指向另一个域或地址的技术 重定向有很多用途 并且需要考虑几种不同类型的重定向 每当站点需要将请求一个地址的人定向到另一个地址时 就会使用重定向 当您创建内容和管理服务器时 您经常会
  • eclipse.ini vm 参数 - eclipse.ini 文件位置 Mac、Windows

    eclipse ini是用于控制Eclipse启动的配置文件 我们可以使用 Xms Xmx 参数配置 Eclipse VM 参数 例如要使用的 JDK eclipse ini vm permgen 空间 最大和最小堆大小 eclipse i
  • 如何在 Java 中将字符串转换为数组

    有时我们不得不分开字符串到数组基于分隔符或某些正则表达式 例如 读取 CSV 文件行并解析它们以将所有数据获取到字符串数组 在本教程中 我们将学习如何在 Java 程序中将字符串转换为数组 Java 中的字符串到数组 字符串类split S
  • Java优先级队列

    我们时不时地需要以特定的顺序处理队列中的项目 优先级队列是一种完成这项工作的数据结构 Java优先级队列与 普通 不同queue 它不是 先进先出 而是按优先级顺序检索项目 Java优先级队列 The java util PriorityQ
  • Java 中的 CallableStatement 示例

    java中的CallableStatement用于从java程序中调用存储过程 存储过程是我们在数据库中为某些任务编译的一组语句 当我们处理复杂场景的多个表时 存储过程很有用 我们可以将所需的数据发送到存储过程 并在数据库服务器本身中执行逻
  • Docker 详解:如何容器化并使用 Nginx 作为代理

    Status 已弃用 本文已弃用 不再维护 Reason 本文中的技术已经过时 可能不再反映 Docker 最佳实践 请参阅 Docker 生态系统 常用组件简介 如何在 Ubuntu 14 04 上的 Docker 容器中运行 Nginx
  • 如何在 Ruby 中使用字符串方法

    介绍 Ruby strings有许多内置方法可以轻松修改和操作文本 这是许多程序中的常见任务 在本教程中 您将使用字符串方法来确定字符串的长度 索引和拆分字符串以提取子字符串 添加和删除空格和其他字符 更改字符串中字符的大小写以及查找和替换