В Smalltalk, если бы дали строка 'OneTwoThree', я хотел бы удалить последнее 'Три' часть.e., В нотации средства поиска метода Писка: 'OneTwoThree' . 'Three' . 'OneTwo'
.
Лучшее, которое я могу придумать:
'OneTwoThree' allButLast: 'Three' size
,
но это не чувствует очень Smalltalk-выход, потому что это использует длину подстроки, а не саму подстроку. Как Вы кодировали бы его?
Если вам нужно удалить все после только последнего появления:
|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: [оригинал копия]
В проекте Moose должен быть метод #removeSuffix:
, который удаляет заданный суффикс, если он присутствует.
Я обычно использую метод #copyReplaceAll: with:, конечно, если последняя строка не повторяется где-либо еще в исходной строке:
'OneTwoThree' copyReplaceAll: 'Three' with: ''