Изящный способ удалить последнюю часть строки?

В Smalltalk, если бы дали строка 'OneTwoThree', я хотел бы удалить последнее 'Три' часть.e., В нотации средства поиска метода Писка: 'OneTwoThree' . 'Three' . 'OneTwo'.

Лучшее, которое я могу придумать:

'OneTwoThree' allButLast: 'Three' size,

но это не чувствует очень Smalltalk-выход, потому что это использует длину подстроки, а не саму подстроку. Как Вы кодировали бы его?

7
задан nes1983 16 June 2010 в 13:32
поделиться

4 ответа

'OneTwoThree' readStream upToAll: 'Three'
8
ответ дан 6 December 2019 в 11:45
поделиться

Если вам нужно удалить все после только последнего появления:

|original cutOut lastEnd currentEnd modified|

original := 'OneTwoThree'.
cutOut := 'Three'.
lastEnd := 0.
[currentEnd := lastEnd.
lastEnd := original indexOf: cutOut startingAt: lastEnd +1.
lastEnd = 0 ] whileFalse.

modified := currentStart > 0 ifTrue: [original first: currentEnd] ifFalse: [оригинал копия]

1
ответ дан 6 December 2019 в 11:45
поделиться

В проекте Moose должен быть метод #removeSuffix: , который удаляет заданный суффикс, если он присутствует.

2
ответ дан 6 December 2019 в 11:45
поделиться

Я обычно использую метод #copyReplaceAll: with:, конечно, если последняя строка не повторяется где-либо еще в исходной строке:

'OneTwoThree' copyReplaceAll: 'Three' with: ''
6
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

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