4

私はから取得しようとしています:

'hello how are you today'

'helloHowAreYouToday'

そして、私asCapitalizedPhrase asLegalSelectorはそのトリックを行うだろうと思いましたが、そうではありません。

これを行うための適切な方法は何ですか?

編集:

私は自分の質問を明確にすべきだと思います。文字列をキャメルケースセレクターに変換する方法はすでにあります。

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

ファロが同じことを達成するための標準的なシステム方法を持っているかどうか疑問に思っていました:)

4

4 に答える 4

8

これはどう?

| tokens |
tokens := 'this is a selector' findTokens: Character space.
tokens allButFirst
    inject: tokens first
    into: [:selector :token | selector, token capitalized]
于 2011-02-23T14:30:49.243 に答える
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 ] ] ].

編集:フランクのソリューションと比較して、これは長いですが、空の入力で壊れることはなく、入力を介してストリーミングされるため、ステップごとに新しい文字列インスタンスが作成されないことに注意してください。文字列)。

于 2011-02-23T13:40:09.953 に答える
1

使用しているPharoのバージョンはわかりませんが、安定版5.0では、

'hello world this is a selector' asCamelCase asValidSelector

収量

helloWorldThisIsASelector

私が使用しているものを取得するには、以下を実行します。

curl get.pharo.org/50+vm | bash 
于 2016-01-23T05:58:48.547 に答える
0

私はこれが古いことを知っていますが、Squeakには基本的にこれを行う便利な実装(String >> asCamelCase)があります:

(String
    streamContents: [:stream | 'hello world' substrings
            do: [:sub | stream nextPutAll: sub capitalized]]) asLegalSelector
于 2016-01-21T13:19:16.910 に答える