2016-10-12 3 views
1

1. 다음 문장에서 두 번째 AMPERSAND를 제거 하시겠습니까? "사과 & 바나나 & 포도 & 사과"문자열에서 두 번째 AMPERSAND를 제거하는 방법은 무엇입니까?

2.how 문자열을 다음과 같은 사항에 대해 두 번째 앰퍼샌드에서 문자열을 분할? 나는 첫번째 AMPERSAND를 무시하고 두번째 AMPERSAND 이후로 나누고 싶다. "사과 & 바나나 & 포도 & 사과"

+0

나는 모든 앰퍼샌드에서 그것을 나눌 수 있고, 결과 배열의 첫 번째와 두 번째, 세 번째와 네 번째 요소를 다시 앰퍼샌드로 다시 결합 할 수 있다고 생각한다. –

답변

0

당신은 블록으로 gsub를 사용할 수 있습니다, 두 번째 경우를 들어

index_to_remove = 2 
current_index = 0 
my_string = "apple&banana&grape&apple" 
my_string.gsub('&') { |x| current_index += 1; current_index == index_to_remove ? '' : x} 
#=> "apple&bananagrape&apple" 

두 번째 &로 교체 할 수 있습니다 : 첫 번째 경우를 들어

고유 한 값과 균등 분할 :

index_to_split = 2 
current_index = 0 
my_string = "apple&banana&grape&apple" 
my_string.gsub!('&') { |x| current_index += 1; current_index == index_to_split ? '&&' : x} 
my_string.split('&&') 
#=> ["apple&banana", "grape&apple"] 
1
당신이 &로 문자열을 분할하는 경우
arr = "apple&banana&grape&apple".split('&') 
#arr = ["apple", "banana", "grape", "apple"] 

첫 번째 쿼리를 해결하기 위해, 두 번째 쿼리

arr[0..1].join('&').concat(arr[2..-1].join('&')) 
# "apple&bananagrape&apple" 

,

[words[0..1].join('&'), words[2..-1]].flatten 
#["apple&banana", "grape", "apple"] 
+0

시도하고 최적화하는 내 대답을 삭제하고 두 번째 쿼리에 대한 내 코드와 동일하게 업데이트 된 것을 볼 수 있습니다 :) 실제로 처음에는 '나머지'를 사용하여 처음 생각했습니다 ... 원래의 더 나은 대답을 생각하지 않습니까? 두 번째 쿼리 @pramod? 아마도 @harsha 명확하게 수 있습니까? – SRack

+0

@srack 나는 좀 더 일반적인 답을주기 위해 수정하려고했다. 우리가 세 번째'&'에서 분리하고 싶다고 가정하면, 원래의 대답으로 세 가지 변수가 생길 것입니다. @ harsha-vardhan-reddy 두 번째 쿼리에 답하도록 해결책을 수정하십시오. – Pramod

+1

그래서 제가 드로잉 보드로 돌아간 것입니다. 현재의 대답이 두 번째 쿼리에 올바르게 응답하지 않았고, 현재 상태로되어있는 것입니다. 곧 찾아야합니다 :) – SRack

0

, 그것은 처음 두/마지막 두 다시 가입하고 다시 변환하는 것은 매우 간단합니다 문자열 또는 배열로 바꾸기 :

words = "apple&banana&grape&apple".split('&') 

# First query 
words[0..1].join('&') + words[2..-1].join('&') 
# Giving you: "apple&bananagrape&apple" 

# Second query 
[words[0..1].join('&'), words[2..-1].join('&')] 
# Giving you: ["apple&banana", "grape&apple"] 

다른 길이의 strin gs 및 구분 기호를 사용합니다.

정규식 matchers를 사용하는 좋은 해결책이 있다고 상상해 봅니다.하지만 너무 열정적이지 않으므로 어떤 점에서 도움이되기를 바랍니다.

+0

신중하게 두 번째 쿼리를 읽습니다. 나는 그가 첫번째'&'를 무시하고 두번째 이후로 갈라 놓고 싶어한다고 생각한다. :) – Pramod

+1

그건 내 생각이었고 왜 내가 대답을 지웠는가! 다른 사람들도이 솔루션을 사용 했으므로 나중에 다시 열어 볼 수 있다고 생각하고 동일한 작업을 수행 할 수 있도록 편집했습니다. 지금 당신이 올바른 해결책을 가지고 돌아 왔다고 생각하십시오. 당신 +1에게 ... – SRack

관련 문제