Elegant way to remove the last part of a string?

♀尐吖头ヾ 提交于 2019-12-07 00:26:24

问题


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 up 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?


回答1:


'OneTwoThree' readStream upToAll: 'Three'



回答2:


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

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



回答3:


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




回答4:


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]



来源:https://stackoverflow.com/questions/3053685/elegant-way-to-remove-the-last-part-of-a-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!