使用gets.chomp.to_i检查number是否为ruby中的整数

时间:2018-03-07 23:27:44

标签: ruby

我打算检查给定的输入是否是整数。 gets.chomp以字符串形式输入,然后使用to_i将其转换为整数。如果我输入abcd并使用classis_a(Integer)进行检查,则总是说它是一个整数。

x = gets.chomp.to_i
if x.is_a?(Integer)
    puts "It's an integer"
else
    puts "It's a string"
end

如何检查输入是整数还是字符串?

3 个答案:

答案 0 :(得分:5)

您的问题

由于您使用.to_i将输入转换为整数,x.is_a?(Integer)始终为true,即使您的字符串不包含任何数字。有关.to_i行为的详情,请参阅this answer

解决方案

使用Integer()代替.to_i转换您的输入。

Integer()在无法将输入转换为整数时抛出,因此您可以执行以下操作:

input = gets.chomp
x = Integer(input) rescue false
if x
    puts "It's an integer"
else
    puts "It's a string"
end

答案 1 :(得分:2)

您可以使用正则表达式:

boolean = gets.match?(/\A\d+\n\z/)

答案 2 :(得分:0)

另一种方法可能是:

x = gets.chomp
x === x.to_i ? "It's an integer" : "It'a a string"