2011-02-23 44 views
4

我試圖得到:如何cameroCase在Pharo中的字符串?

'hello how are you today' 

'helloHowAreYouToday' 

而且我還以爲asCapitalizedPhrase asLegalSelector會做的伎倆,但事實並非如此。

這樣做的正確方法是什麼?

編輯:

我想我要澄清我的問題;我已經有一個方法來轉換一個字符串轉換爲駝峯選擇:

|aString aCamelCaseString| 
aString := aString findTokens: $ . 
aCamelCaseString := aString first. 
aString allButFirst do: [:each | aCamelCaseString := aCamelCaseString , each capitalized]. 

我只是想知道菲羅是否有一個標準的系統方法來達到同樣的:)

+0

您是否考慮編寫自己的方法來執行此操作?你基本上只需要tokenise,把每個標記的首字母大寫,然後收集到一個字符串中。 – Marcin 2011-02-23 13:08:03

+0

是的,我確實有這樣做的實現,但我想知道Pharo是否已經有了一個標準的方法來做到這一點。 – 2011-02-23 14:27:38

回答

1

你不說你正在使用的菲羅的版本,但在穩定5.0,

'hello world this is a selector' asCamelCase asValidSelector 

產生

helloWorldThisIsASelector 

要得到我正在使用的運行:

curl get.pharo.org/50+vm | bash 
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 ] ] ]. 

編輯:注意到,相對於弗蘭克的解決方案這一個歷時較長,但它不會破壞空輸入,它不會創建一個新的字符串實例爲每個步驟,因爲它流過輸入,這是更有效的(如果你有大字符串)。

8

這個怎麼樣?

| tokens | 
tokens := 'this is a selector' findTokens: Character space. 
tokens allButFirst 
    inject: tokens first 
    into: [:selector :token | selector, token capitalized] 
+0

比我的代碼更好:) – 2011-02-23 14:56:12

0

我知道這是舊的,但佳樂有一個有用的實現(字符串>> asCamelCase)基本上做到這一點:

(String 
    streamContents: [:stream | 'hello world' substrings 
      do: [:sub | stream nextPutAll: sub capitalized]]) asLegalSelector 
相關問題