如何检查字符串=='\“(文字字符)

时间:2014-01-15 20:50:21

标签: ruby

这是我的问题代码

if (i == '*' || i == '\' || i == '+' || i == '-' )

但经过大量研究后,我无法弄清楚如何简单地检查i == '\'的平等性

布朗尼指出,如果你能指导我一个更简单的解决方案。我想要解析一个字符串并改变任何数学运算符+ -> :+, * -> :* ...etc我想到的一个想法就是有4个gsub()函数,但这会产生两个问题(1)仍然需要弄清楚如何用'\'来检查是否相等,更重要的是,(2)我觉得这有很多代码重复,而且我听说这是Ruby中的一个很大的风格'不'。

3 个答案:

答案 0 :(得分:3)

尝试

i == '\\'

\escape character,这意味着它通常不代表自己,而是改变紧随其后的角色会发生什么。例如,您可以使用它在单个带引号的字符串中放置单引号:

test = 'hello \'world\''
puts test
# ==> hello 'world'

或在双引号字符串中添加换行符:

test = "hello\nworld"
puts test
# ==> hello
# world

因此,为了单独使用它,你必须将其转义,导致双斜线:\\

至于更简单的if语句,怎么样

if %w{* \\ + -}.include?(i)
  ...

答案 1 :(得分:2)

'\\'是如何声明一个字符串为\的字符串。

您可能认为不是的原因是因为irb报告包含引号和转义序列的字符串的inspect值。

irb(main):010:0> '\\'
=> "\\"

但是,如果您使用puts查看字符串,您会看到它是正确的:

irb(main):012:0> puts "\\"
\

所以你想要:

i == '\\'

至于重构,我建议使用一组运算符字符串,然后检查该数组中是否有该运算符。

operators = ['+', '-', '*', '\\']

if operators.member? i
  # valid operator
end

但等等......通常不是a/b而不是a\b?提示分子 over 分母是一个正斜线。反斜杠没有多大意义。事实上,反斜杠被用作转义字符,因为它在大多数其他环境中几乎无用。

所以你应该使用不包含特殊字符的'/',并按照你的预期工作。

答案 2 :(得分:1)

  

我想解析一个字符串并更改任何数学运算符+ -> :+, * -> :* ...等等

String#gsub可行:

puts 'a + b * c - d \ e'.gsub(/([+*-\\])/, ':\1')

输出

a :+ b :* c :- d :\ e