我不确定我哪里出错,但我创建了一个名为电话号码的课程,该课程采用了ph的参数。 ph转换为字符串。因此,当输入123456789像a.PhoneNumber(123456789)时,它应输入(123)456-7890,当调用a.area_code时,它应该给#123等。
为什么我的扫描方法都不能正常工作?
我可以使用split方法从1234567890中仅提取#123吗?
class PhoneNumber
def initialize (ph)
@ph = ph
@ph.insert(0, '#')
@ph.scan(/.{0,1}/).join('( ')
@ph.scan(/.{3,4}/).join(')')
@ph.scan(/.{3,5}/).join('- ')
end
def to_s
@ph
end
def area_code
@ph.split(0,2)
end
end
print "Please enter the number: "
puts a = PhoneNumber.new(gets.strip)
puts a.area_code
答案 0 :(得分:1)
扫描方法不起作用,因为您使用的正则表达式没有按照我认为您应该做的那样做。
.{0,1}
匹配0到1个字符之间的任何内容。这就是为什么他们只是迭代地返回匹配字符串
@ph.scan(/.{0,1}/) #=> "#1234567890"
@ph.scan(/.{3,4}/) #=> "#1234567890"
@ph.scan(/.{4,5}/) #=> "#1234567890"
解决此问题的一种可能方法是使用索引将@ph
拆分为三部分。或者,您也可以使用类似的东西来分组
@ph.scan(/(\d{3})(\d{3})(\d{4})/) #=> [["123", "456", "7890"]]
split
的第一个参数必须是@ph.split(0,2)
如果area_code
的第一个字符为@ph
#
这样的内容
def area_code
@split[1,3]
end