我试图从字符串'(3)'
获取整数。然而方法to_i
返回0
。 似乎括号引用引起的问题,但我不明白原因。Ruby - 解析'(3)'为整数返回0
'3'.to_i => 3
(3).to_i => 3
'(3)'.to_i => 0
为什么会发生,以及如何解决它?谢谢!
我试图从字符串'(3)'
获取整数。然而方法to_i
返回0
。 似乎括号引用引起的问题,但我不明白原因。Ruby - 解析'(3)'为整数返回0
'3'.to_i => 3
(3).to_i => 3
'(3)'.to_i => 0
为什么会发生,以及如何解决它?谢谢!
String#to_i
忽略尾随(非数字)字符:
"3foo".to_i #=> 3
"3)".to_i #=> 3
领导(非数字)字符不工作,返回0
:
"foo3".to_i #=> 0
"(3".to_i #=> 0
您可以使用常规提取整数部分表达:
"(3)"[/-?\d+/] #=> "3"
并转换其为一个整数:
"(3)"[/-?\d+/].to_i #=> 3
(3)
是一个表达式,而不是一个字符串;它评估为号码3
。
'3'
是一个字符串文字,它不计算为任何数字,但可以使用to_i
进行转换。规则是quite simple:
返回作为 整数碱以STR解释前导字符的结果(2和36之间)。忽略有效数字末尾 后的无关字符。 如果在 处没有有效的数字,则返回str的起始位置0。当base有效时,此方法从不会引发异常 。
'(3)'
是另一个字符串文字,它也不会自己评估为任何数字。问题在于你无法使解析器“理解”某种特定字符串的开头应该被视为分隔符,并且基本上被忽略。这不是它的工作原理。
一个可行的办法是在字符串的开头sub
更换(
符号(如尾非数字符号由to_i
忽略):
'(3)'.sub(/^\(/, '').to_i => 3
但我真的不知道为什么你得到括号首先在这里。
(3)
是红宝石表达,和'(3)'.to_i
不为同样的原因,'Math.sqrt(9)'.to_i
不起作用工作。
如果有帮助,您可以使用正则表达式来挑选出字符串是若干部分,然后将其换算
puts '(3)'[/\d+/].to_i
输出
3
谢谢你详尽的解释。 (我承认我可以查看文档,我认为to_i处理这样的字符串)。括号的使用仅仅是一个美学问题,没有什么大不了的。 – optimista