在Ruby

时间:2016-04-22 00:07:09

标签: ruby utf-8 ascii

虽然它可能无法读取,但我希望有人可以告诉我是否可能 - 如果是这样 - 如何使以下代码正常工作

true if (string1 - string2) == predefined_distance

我希望使用Ruby的Open Classes可以实现这一点,但是查看UTF-8和Encoder::Converter的文档我不确定它是否真的可以做除<=>以外的任何事情。这根本不准确。也许我们可以转换为ASCII并比较这些值?

使用的一个例子可能是比较两个打开一个右括号,看看它们是否匹配,而不是为每种类型的括号定义单独的列表或容器,而是我们可以为任意两个任意字符定义一个距离。 / p>

2 个答案:

答案 0 :(得分:2)

String类的内置方法ord可以返回字符的编号:

true if (string1.chars.first.ord - string2.chars.first.ord) == predefined_distance 

http://ruby-doc.org/core-2.2.0/String.html#method-i-ord

答案 1 :(得分:1)

你想要完成什么?你真的只想检查字符串中的第一个字符吗?此外,关于ASCII值,世界上有许多字符集不使用ASCII,甚至每个字符需要多个字节。因此,确保您对字符而不是字节进行操作非常重要。这是一个使用“红宝石”这个词的例子。在日语中,在irb:

2.3.0 :018 > s = 'ルビー'
 => "ルビー"
2.3.0 :019 > s.chars
 => ["ル", "ビ", "ー"]
2.3.0 :020 > s.chars.size
 => 3
2.3.0 :021 > s.bytes
 => [227, 131, 171, 227, 131, 147, 227, 131, 188]
2.3.0 :022 > s.bytes.size
 => 9
2.3.0 :023 > s.chars.first.ord.to_s(16)
 => "30eb"