如何让Ruby将字符串的索引视为字符(而不是ASCII代码)?

时间:2010-05-09 19:28:18

标签: ruby string compare

我正在检查目录路径中的最后一个字符是否为'/'。如何让ruby将字符串的特定索引视为字符而不是相关的ASCII代码?

例如,以下内容始终返回false

dir[dir.length - 1] == '/'

这是因为dir[dir.length - 1]返回ASCII码47(而非'/')。

关于如何将47解释为'/'的任何想法?或者首先处理这个问题的方法完全不同?

感谢。

2 个答案:

答案 0 :(得分:5)

你必须要小心,因为Ruby 1.8和Ruby 1.9的行为发生了变化。

# In Ruby 1.8:
"hello"[0] == 104

# In Ruby 1.9:
"hello"[0] == "h"

# In both versions:
"hello"[0] == ?h
"hello"[0, 1] == "h"

通常,如果您只想测试与角色的相等性,可以使用?x来表示角色x(这将是1.8中的ascii代码和1.9中的字符串) ),或者通过给出明确的长度来使用范围形式。这假设您只处理ascii。对于unicode,你可能应该使用Ruby 1.9。

从您的示例中,最好的表单可能是dir[-1] == ?/,或者如果使用Rails(或activesupport),您可能更喜欢dir.ends_with? '/'

答案 1 :(得分:0)

您可以使用47.chr将47解释为'/',并返回=> "/" 作为旁注,您可以使用dir[-1]返回最后一个字符,而不是dir[dir.length-1]

所以,这将适用于ruby 1.8或1.9:

dir[-1].chr == '/'