Расщепление строки с последним подчеркиванием

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

1
задан sawa 15 January 2019 в 09:52
поделиться

6 ответов

Вы можете использовать String#rpartition , который ищет заданный шаблон из правого конца строки и разбивает его, когда находит его.

'a_b_c_d_e'.rpartition(/_/)
=> ["a_b_c_d", "_", "e"]

s = 'a_b_c_d_e'
parts = s.rpartition(/_/)
[parts.first, parts.last]
=> ["a_b_c_d", "e"]

РЕДАКТИРОВАТЬ: применение советов из комментариев:

'a_b_c_d_e'.rpartition('_').values_at(0,2)
=> ["a_b_c_d", "e"]
0
ответ дан mrzasa 15 January 2019 в 09:52
поделиться

Тебе действительно нужно разделиться? Как насчет простой замены _ пробелом? например используя rindex и []=

a[a.rindex('_')] = ' '

я не делал тест, но split создает новый массив, который обычно требует больше ресурсы, по крайней мере, на других языках.

РЕДАКТИРОВАТЬ: поскольку вопрос был отредактирован, теперь ясно, что ОП запрашивает список вместо строкового вывода

0
ответ дан SirLenz0rlot 15 January 2019 в 09:52
поделиться

Разделить его регулярным выражением:

a.split(/_(?=[^_]+$)/)

Объяснение:

сопоставляет символ _ с положительным прогнозом (? = [^ _] + $)

[114 ] Соответствует одному символу, отсутствующему в списке ниже [^ _] +, и $ устанавливает позицию в конце строки или перед разделителем строки прямо в конце строки (если есть)

0
ответ дан mi0 15 January 2019 в 09:52
поделиться
'a_b_c_d_e'.split /_(?!.*_)/
  #=> ["a_b_c_d", "e"]

Отрицательный прогноз (?!.*_) требует, чтобы после совпадения подчеркивания в строке не было другого подчеркивания.

0
ответ дан Cary Swoveland 15 January 2019 в 09:52
поделиться

Вы также можете получить значения, как показано ниже,

> a = a.split('_')
> a[0..-2].join('_')
# => "a_b_c_d" 
> a[-1]
# => "e" 
0
ответ дан ray 15 January 2019 в 09:52
поделиться

Если вы знаете, что эта строка соответствует следующему формату:

str = 'a_b_c_d_e'
# Remainder
str[0...-2]    # -> 'a_b_c_d'

# Last symbol
str[-1]        # -> 'e'
0
ответ дан Steve Redka 15 January 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: