如何输出某些字符并在ruby中的某些位置添加字符?

时间:2016-09-27 00:31:03

标签: ruby

我不确定我哪里出错,但我创建了一个名为电话号码的课程,该课程采用了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

1 个答案:

答案 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