我想从中获取:
'hello how are you today'
到
'helloHowAreYouToday'
我认为asCapitalizedPhrase asLegalSelector
可以做到这一点,但事实并非如此。
这样做的正确方法是什么?
修改
我想我应该澄清我的问题;我已经有办法将字符串转换为camelCase选择器:
|aString aCamelCaseString|
aString := aString findTokens: $ .
aCamelCaseString := aString first.
aString allButFirst do: [:each | aCamelCaseString := aCamelCaseString , each capitalized].
我只是想知道Pharo是否有一个标准的系统方法来实现相同的目标:)
答案 0 :(得分:8)
这个怎么样?
| tokens |
tokens := 'this is a selector' findTokens: Character space.
tokens allButFirst
inject: tokens first
into: [:selector :token | selector, token capitalized]
答案 1 :(得分:3)
我认为没有现成的方法可以做到这一点。
这是一个解决您问题的实现:
input := 'hello how are you today'.
output := String streamContents: [ :stream |
| capitalize |
capitalize := false.
input do: [ :char |
char = Character space
ifTrue: [ capitalize := true ]
ifFalse: [
stream nextPut: (capitalize
ifTrue: [ char asUppercase ]
ifFalse: [ char ]).
capitalize := false ] ] ].
编辑:请注意,与Frank的解决方案相比,这个解决方案更长但不会因空输入而中断,并且不会为每个步骤创建新的字符串实例因为它在输入上流动,这更有效(如果你有大字符串)。
答案 2 :(得分:1)
你没有说你正在使用哪个版本的Pharo,但是在稳定的5.0中,
'hello world this is a selector' asCamelCase asValidSelector
产量
helloWorldThisIsASelector
要获得我正在使用的内容:
curl get.pharo.org/50+vm | bash
答案 3 :(得分:0)
我知道这是旧的,但Squeak有一个有用的实现(String>> asCamelCase)基本上这样做:
(String
streamContents: [:stream | 'hello world' substrings
do: [:sub | stream nextPutAll: sub capitalized]]) asLegalSelector