优雅的方式删除字符串的最后一部分?

时间:2010-06-16 13:32:57

标签: smalltalk

在Smalltalk中,如果给出字符串'OneTwoThree',我想删除最后的'Three'部分,.e。,In Squeak方法查找符号:'OneTwoThree' . 'Three' . 'OneTwo'

我能想到的最好的是:

'OneTwoThree' allButLast: 'Three' size

但它感觉不太Smalltalk-ish,因为它使用子字符串长度,而不是子字符串本身。你会怎么编码?

4 个答案:

答案 0 :(得分:8)

'OneTwoThree' readStream upToAll: 'Three'

答案 1 :(得分:6)

我通常使用#copyReplaceAll:with:方法,如果最后一个字符串在原始字符串中没有重复,当然:

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

答案 2 :(得分:2)

在Moose项目中,应该有一个方法#removeSuffix:删除给定的后缀(如果存在)。

答案 3 :(得分:1)

如果只在最后一次出现后你需要所有东西:

| original cutOut lastEnd currentEnd modified |

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

modified:= currentStart> 0 ifTrue:[original first:currentEnd] ifFalse:[原件]