在Smalltalk中,如果给出字符串'OneTwoThree',我想删除最后的'Three'部分,.e。,In Squeak方法查找符号:'OneTwoThree' . 'Three' . 'OneTwo'
。
我能想到的最好的是:
'OneTwoThree' allButLast: 'Three' size
,
但它感觉不太Smalltalk-ish,因为它使用子字符串长度,而不是子字符串本身。你会怎么编码?
答案 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:[原件]