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

Удалил мой ответ, чтобы попытаться оптимизировать, и я вижу, что вы обновили его до моего кода для второго запроса. На самом деле думали, что у вас это было в первый раз, используя 'rest' ... вы не думаете, что ваши оригинальные лучшие ответы второй запрос @pramod? Возможно, @harsha может уточнить? – SRack

+0

@srack Я собирался изменить, чтобы дать более общий ответ. Предположим, если мы хотим разделиться от третьего '&', то с моим исходным ответом у нас будет три переменные. Итак, изменилось решение для ответа на запрос @ harsha-vardhan-reddy second. – 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"] 

Вы можете настроить это для разной длины полосы gs и разделители по мере необходимости.

Я предполагаю, что есть хорошее решение с помощью регуляторов регулярных выражений, но я не слишком жарко на них, поэтому надеюсь, что это поможет в некотором роде!

+0

внимательно прочитайте второй запрос. Я думаю, он хочет игнорировать первые '&' и расколоться со второго раза :) – Pramod

+1

Это было мое мышление и почему я очистил ответ! Заметили, что все остальные пошли с этим решением, поэтому подумали, что я поплю его обратно, и что вы отредактировали свой, чтобы сделать то же самое. Подумайте, теперь вы вернули его, у вас есть правильное решение. +1 к твоему ... – SRack

Смежные вопросы