字符串截取和查询操作

也许String对象最重要的操作就是通过[]下标访问操作了,你可以通过这种方式提取字符串内容或者更改字符串内容。在Ruby1.8中字符串被当作一个字节或者8位的字符码数组,你可以通过length或者size方法获得这个数组的长度,你通过在[]设置索引数字来设置或者得到那个位置的值:
s = 'hello';   # Ruby 1.8
s[0]           # 返回值为104,第一个字母'h'的ASCII码
s[s.length-1]  # 返回值为111,最后一个字母'o'的ASCII码
s[-1]          # 返回值为111,你可以使用负数索引
s[-2]          # 返回值为108,倒数第二个字母'l'的ASCII码
s[-s.length]   # 104: 另一种访问第一个字符的方式
s[s.length]    # nil: 如果超出索引范围就返回nil

注意的一点是,索引是正向从0开始的,如果你使用负数索引那么最后一个字母是从-1开始索引的。而且,在Ruby中如果你给出了一个超出索引范围的下标,Ruby不会抛出异常,而是返回一个nil。
在Ruby1.9中返回值为一个字符串,而不是字符的编码:
s = 'hello';   # Ruby 1.9
s[0]           # 返回'h'
s[s.length-1]  # 返回'o'
s[-1]          # 返回'o'
s[-2]          # 返回'l'
s[-s.length]   # 返回'h'
s[s.length]    # nil:如果超出索引范围就返回nil

如果要修改字符串内容,只要给相应位置赋值就可以了,Ruby1.8中你可以使用字符编码或者字符串作为赋值内容,在Ruby1.9中你应该使用字符串:
s[0] = ?H        # 将第一个字符替换为大写的H
s[-1] = ?O       # 将最后一个字符替换为大写的O
s[s.length] = ?! # 这里会出现异常,因为你的赋值超出了索引的访问

等号右边可以是任意的字符串,多字节字符串也是允许的,或者是一个空的字符串,一下代码在Ruby1.8和1.9都可以正常运行:
s = "hello"      # 初始化字符串
s[-1] = ""       # 删除最后一个字符,现在s的值为hell
s[-1] = "p!"     # 修改最后一个字符现在s的值为 "help!"

大多数情况下,你需要取得的是字符串中的一段内容,而不是一个单独的字符。要截取字符串中的一段内容你可以在[]中给出两个用逗号隔开的数字,通过这种方式你就可以得到一段文本了。其中第一个数字指出了我们要截取的文本从哪个位置开始索引,第二个字符指出了我们要截取的内容的长度:
s = "hello"
s[0,1] = "H"              # 将第一个字符替换为一个大写的H
s[s.length,0] = " world"  # 在字符我末尾增加其他的字符串
s[5,0] = ","              # 在字符串中插入一个逗号
s[5,6] = ""               # 通过给一段文本赋值空文本的方式来删除那段文本,现在s == "Hellod"

另一种截取或者插入、删除、修改字符串的方式是使用Range(范围)对象,Range对象通过两个数字之间插入两个联系的点号表示,比如1..3表示范围在1到3之间。
s = "hello"
s[2..3]           # "ll": 位于索引2到3的字符
s[-3..-1]         # "llo": 负数索引页可以使用
s[0..0]           # "h": Range只包含一个字符
s[0...0]          # "": 空的Range对象
s[2..1]           # "": 这也是空的Range
s[7..10]          # nil: 这个Range超出了索引范围,所以返回nil
s[-2..-1] = "p!"     # 替换值,现在s=="help!"
s[0...0] = "Please " # 在起始位置插入新值,现在s== "Please help!"
s[6..10] = ""        # 删除值,现在s== "Please!"

注意的一点是,用逗号分隔的方式,分别指出了索引的开始位置和截取字符的长度,而使用Range对象是制定了一段索引的范围,两者是不同的。
另外,你还可以使用字符串作为索引,当你这样做的时候,你得到的是字符串中包含这个字符的第一个,如果查找不到你给出的字符,就返回一个nil对象:
Created with colorer-take5 library. Type 'ruby'

s = "hello"      
while(s["l"])     # 循环判断是否包含字符 "l"
 s["l"] = "L";   # 将找到的字符从 "l" 替换为 "L"
end               # 现在s=="heLLo"

最后要说的是,你还可以在[]中包含正则表达式,这样会得到一个符合正则表达式的内容:
s[/[aeiou]/] = '*'
    # 将找到的第一个原音替换为星号

转载 http://blogruby.blogspot.com/2008/10/11.html
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Grafana是一款强大的开源监控和可视化工具,它允许用户通过各种方式展示数据,包括时间序列图、表格、堆叠图等。横坐标label字符串截取是指在使用Grafana进行数据可视化时,对横坐标上的标签字符串进行提取和处理的操作。 要实现横坐标label字符串截取,可以采取以下方法: 1. 使用Grafana的查询语言(GQL)进行查询时,可以使用特定的函数来提取横坐标上的标签字符串。例如,使用`substr()`函数可以从字符串中提取指定长度的子字符串。你可以在查询语句中使用该函数来截取横坐标标签。 2. 在Grafana的配置文件中,可以自定义横轴刻度标签的显示方式。通过设置标签格式化函数,你可以根据需要自定义标签的显示方式,包括对标签进行截取操作。常用的标签格式化函数包括`replace()`、`substring()`等。 3. 在Grafana的插件市场中,有一些第三方插件提供了横坐标label字符串截取的功能。你可以根据需要选择合适的插件,并按照插件的说明进行配置和使用。 需要注意的是,具体的截取方式取决于你的数据和可视化需求。在提取横坐标标签时,要确保提取的字符串符合Grafana的数据格式要求,否则可能会导致可视化效果不正确或无法显示。 总之,通过使用Grafana的查询语言、配置文件和第三方插件,你可以实现对横坐标label字符串的截取操作,以满足特定的数据可视化需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值