2016-09-27 5 views
-1

어디서 잘못되었는지 잘 모르겠지만 ph 매개 변수를 사용하는 전화 번호라는 클래스를 만들었습니다. ph는 문자열로 변환됩니다. 따라서 123456789를 a.PhoneNumber (123456789)와 같이 입력하면 (123) 456-7890을 입력하고 a.area_code를 호출하면 # 123 등을 부여해야합니다.특정 문자를 출력하고 루비의 특정 위치에 문자를 추가하는 방법은 무엇입니까?

검색 방법이 작동하지 않는 이유는 무엇입니까? 바르게?

분할 방법을 사용하여 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

첫 번째 인수는 @의 ph.split'에서'String' 또는'Regexp'이어야합니다 – Rashmirathi

답변

1

사용중인 Regex에서 내가 수행 중이라고 생각하는 것을하지 않기 때문에 스캔 방법이 작동하지 않습니다. .{0,1}은 0과 1 사이의 문자와 일치합니다. 그들은 단지 반복적으로이 세 부분에 @ph을 분할 얻기 위해 인덱스를 사용하는 것입니다 해결하기 위해

@ph.scan(/.{0,1}/) #=> "#1234567890" 
@ph.scan(/.{3,4}/) #=> "#1234567890" 
@ph.scan(/.{4,5}/) #=> "#1234567890" 

한 가지 가능한 방법을 일치 문자열을 반환하는 이유입니다. 또한, 당신은 또한 첫 번째 문자의 경우 @ph.split(0,2)

의 문자열이나 정규 표현식 당신은 다음과 같은 area_code 뭔가를 정의 할 수 있습니다 그룹의 수를 분할하기 위해이 같은

@ph.scan(/(\d{3})(\d{3})(\d{4})/) #=> [["123", "456", "7890"]] 
split-

첫 번째 인수가 있어야합니다 뭔가를 사용할 수 있습니다 @ph는`(0.2) 분할 #

def area_code 
    @split[1,3] 
end 
관련 문제