Элегантный способ удалить последнюю часть строки? - PullRequest
7 голосов
/ 16 июня 2010

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

Лучшийможно придумать:

'OneTwoThree' allButLast: 'Three' size,

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

Ответы [ 4 ]

8 голосов
/ 16 июня 2010
'OneTwoThree' readStream upToAll: 'Three'
6 голосов
/ 16 июня 2010

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

'OneTwoThree' copyReplaceAll: 'Three' with: ''
2 голосов
/ 18 июня 2010

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

1 голос
/ 16 июня 2010

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

| оригинал cutOut lastEnd currentEnd модифицировано |

оригинал: = 'OneTwoThree'.
cutOut: = 'Три'.
lastEnd: = 0.
[currentEnd: = lastEnd.
lastEnd: = оригинальный indexOf: cutOut начальныйAt: lastEnd + 1.
lastEnd = 0 ] whileFalse.

изменено: = currentStart> 0 ifTrue: [сначала оригинал: currentEnd] ifFalse: [оригинал]

...