Logo
Section 1 / 6

字符串内部

学习如何访问字符串中的各个元素。

导入

字符串内部

学习如何访问字符串中的各个元素。

集合

集合是一个通用术语,用于将多个值组合成一个整体。我们在现实生活中经常使用集合——一本书是页面的集合,一列火车是车厢的集合,一个衣柜是衣物的集合。

字符串

字符串是由字符组成的集合,通常被视为一个单一单元。它用于存储诸如姓名、地址、消息等文本值。

初始化字符串

在 Ruby 中有多种方式可以初始化字符串。以下程序演示了这些方法:

1String1 = 'String1 in Single Quotes \' not "' 2print(String1,"\n") 3 4String2 = "String2 in Double Quotes \" not '" 5print(String2,"\n") 6 7String3 = '''String3 in Three Single Quotes: neither \' nor "''' 8print(String3,"\n") 9 10String4 = '''String4 Three quotes 11 allow 12 multi-line''' 13print(String4,"\n")

上面代码中有一些新内容需要理解。以下是初始化字符串变量的三种方法:

  • 第1行: String1 的文本用单引号 ' 包裹。在此类字符串中,可以直接添加 ",而 ' 可以通过反斜杠 \ 转义后加入。
  • 第4行: String2 的文本用双引号 " 包裹。在此类字符串中,可以直接添加 ',而 " 可以通过反斜杠 \ 转义后加入。
  • 第7行: String3 和 String4 的文本用三个单引号 ''' 包裹。在此类字符串中,可以直接添加 ",而 ' 可以通过反斜杠 \ 转义后加入。
  • 最后一种方法还便于将多行文本赋值给字符串变量,如 String4 的第10至12行所示。其他两种方法无法实现这一点。

访问字符串中的字符

Ruby 允许我们通过整数索引来访问字符串中的单个字符。方法是在字符串变量名后用方括号包裹索引数字,如下程序所示:

1String1 = "Educative" 2print(String1,"\n") 3 4print(String1[0],'=',String1[-9],"\n") # 显示字符串的第一个字符 5print(String1[1],'=',String1[-8],"\n") # 显示字符串的第二个字符 6print(String1[2],'=',String1[-7],"\n") # 显示字符串的第三个字符 7print(String1[3],'=',String1[-6],"\n") # 显示字符串的第四个字符 8print(String1[4],'=',String1[-5],"\n") # 显示字符串的第五个字符 9print(String1[5],'=',String1[-4],"\n") # 显示字符串的第六个字符 10print(String1[6],'=',String1[-3],"\n") # 显示字符串的第七个字符 11print(String1[7],'=',String1[-2],"\n") # 显示字符串的第八个字符 12print(String1[8],'=',String1[-1],"\n") # 显示字符串的第九个字符

上述代码逐行显示字符串的各个字符。第一个字符位于索引 0,索引沿字符串线性递增。Ruby 还支持负索引。最后一个字符位于 -1 索引,索引沿字符串线性递减,如下图所示:

切片

切片是从字符串中提取的一段字符子集。我们使用 [i..f] 语法指定要访问的起始和结束索引。有多种方式获取字符串切片,但必须同时提供两个值:

  • 使用 ...,如 [i...f],表示从索引 i 到 f-1 的切片(不包含 f)。
  • 使用 ..,如 [i..f],表示从索引 i 到 f 的切片(包含 f)。
  • 使用逗号分隔两个值,如 [i, n],表示从索引 i 开始取 n 个字符的切片。

以下代码展示了多种切片方式,并演示了如何通过切片和连接(使用 + 操作符合并两个字符串)修改字符串中的单个字符。

1String1 = "Educative" 2print("\n第3到第5个索引之间的字符: ") 3print(String1[3...5],"\n") 4print("\n第3个索引到倒数第3个索引之间的字符: ") 5print(String1[3...-3],"\n") 6 7String1[9]='-' 8print(String1,"\n") 9 10String2 = String1 + ' Learner' 11print(String2,"\n") 12 13String3 = String2[0...10] + '-' + String2[11..-1] 14print(String3,"\n")

在上述代码中:

  • String1[3...5] 中,范围 ... 的起始索引为 3,结束索引为 5。该切片包含两个字符 ca,位于索引 3 和 4(在索引 5 前停止),因为 ... 不包含右端点。
  • String1[3...-3] 中,范围 ... 的起始索引为 3,结束索引为 -3。该切片包含三个字符 cat,位于索引 3、4 和 5(在索引 -3 或 6 前停止)。
  • 两个字符串可以通过 + 操作符连接,如 String2 所示。
  • 可以直接通过切片修改任意索引位置的字符,如 String1[9] = '-'。也可以通过切片和连接的方式修改字符,如 String3 所示。[0...10] 表示从字符串开头到索引 10-1 的切片,[11..-1] 表示从索引 11 到字符串末尾的切片。可以在赋值左侧使用 String2 代替 String3。

字符串操作练习

以下是几个用于练习 Ruby 字符串操作的示例程序。点击“显示答案”按钮可查看解决相应问题的程序。你可以将给出的解决方案复制粘贴到代码编辑器中,以确保你的输出与示例一致。编程中可能存在多种正确的解决方案。

逆序打印字符

编写一个程序,逐行显示字符串中的字符,顺序为从后往前。字符串长度限制为九个字符。

示例输入

1"Educative"

示例输出

1e 2v 3i 4t 5a 6c 7u 8d 9E
1string = "Educative" 2# 请在此处编写代码。

你可以在上方的代码编辑器中运行以下代码:

1string = "Educative" 2print(string[-1],"\n") 3print(string[-2],"\n") 4print(string[-3],"\n") 5print(string[-4],"\n") 6print(string[-5],"\n") 7print(string[-6],"\n") 8print(string[-7],"\n") 9print(string[-8],"\n") 10print(string[-9],"\n")

在上述程序中:

  • 我们使用变量 string 存储文本 "Educative"。
  • 我们使用负索引逐个显示 string 的字符,顺序为从后往前。
  • 此任务也可以通过正索引实现。

左移字符串中的字符

编写一个程序,将字符串中的字符向左移动一位,并将最后一个位置替换为句点。

示例输入

1myString = "Educative"

示例输出

1ducative.

提示: 使用切片和连接。

1# 请在此处编写代码。 2myString = "Educative" 3myString = myString[1...]+"." 4print(myString,"\n")

你可以在上方的代码编辑器中运行以下代码:

1myString = "Educative" 2myString = myString[1...]+"." 3print(myString,"\n")

在上述程序中:

  • 我们使用变量 myString 存储文本 "Educative"。
  • 我们通过切片 myString[1...] 将字符向左移动,并通过连接 +"." 在变量末尾添加句点。
  • 我们显示 myString 的更新值。

反转字符串

编写一个程序,将字符串内容反转后存储到另一个字符串中。字符串长度限制为九个字符。

示例输入

1"Educative"

示例输出

1evitacudE
1myString1 = "Educative" 2# 请在此处编写代码。

你可以在上方的代码编辑器中运行以下代码:

1myString1 = "Educative" 2myString2 = "" 3myString2 += myString1[-1] 4myString2 += myString1[-2] 5myString2 += myString1[-3] 6myString2 += myString1[-4] 7myString2 += myString1[-5] 8myString2 += myString1[-6] 9myString2 += myString1[-7] 10myString2 += myString1[-8] 11myString2 += myString1[-9] 12print(myString2)

在上述程序中:

  • 我们使用变量 myString1 存储文本 "Educative"。
  • 我们使用另一个变量 myString2 存储空字符串 ""。
  • 我们从 myString1 的最后一个字符(索引 -1)开始,依次将其添加到 myString2,直到索引 -9。
  • 我们显示 myString2 的更新值。

回文测试

回文是指正读和反读都相同的字符序列。编写一个程序,判断一个字符串是否为回文。字符串长度限制为五个字符。

示例输入 1

1"level"

示例输出 1

1Palindrome

示例输入 2

1"leve"

示例输出 2

1Not Palindrome
1string = "level" 2# 请在此处编写代码。

你可以在上方的代码编辑器中运行以下代码:

1string = "level" 2 3if string[0] == string[-1] and string[1] == string[-2] 4 print("Palindrome","\n") 5else 6 print("Not Palindrome","\n") 7end

在上述代码中:

  • 我们使用变量 string 存储文本 "level"。
  • 我们比较字符串的第一个字符与最后一个字符,再比较第二个字符与倒数第二个字符,作为条件表达式。
  • 如果条件为真,则输出 Palindrome,否则输出 Not Palindrome。

Ruby 中的循环

值的数组