开发者

Elegant way to remove the last part of a string?

开发者 https://www.devze.com 2023-01-03 12:03 出处:网络
In Smalltalk, if given the string \'OneTwoThree\', I\'d like to remove the last \'Three\' part, .e., In Squeak method finder notation: \'OneTwoThree\' . \'Three\' . \'OneTwo\'.

In Smalltalk, if given the string 'OneTwoThree', I'd like to remove the last 'Three' part, .e., In Squeak method finder notation: 'OneTwoThree' . 'Three' . 'OneTwo'.

The best I can come u开发者_StackOverflow中文版p with is:

'OneTwoThree' allButLast: 'Three' size,

but it doesn't feel very Smalltalk-ish, because it uses the substring length, rather than the substring itself. How would you code it?


'OneTwoThree' readStream upToAll: 'Three'


I usually use #copyReplaceAll:with: method, if the last string is not repeated elsewhere in the original string of course:

'OneTwoThree' copyReplaceAll: 'Three' with: ''


In the Moose project, there should be a method #removeSuffix: that removes a given suffix, if present.


If you need everything after only the last occurence removed:

|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: [original copy]

0

精彩评论

暂无评论...
验证码 换一张
取 消