Как верблюдить строку в Pharo? - PullRequest
4 голосов
/ 23 февраля 2011

Я пытаюсь получить от:

'hello how are you today'

до

'helloHowAreYouToday'

И я думал, что asCapitalizedPhrase asLegalSelector справится, но это не так.

Как правильно это сделать?

EDIT:

Думаю, мне следует уточнить свой вопрос; У меня уже есть способ преобразовать строку в селектор camelCase:

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

Мне просто интересно, есть ли у Pharo стандартный системный метод для достижения того же:)

Ответы [ 4 ]

8 голосов
/ 23 февраля 2011

Как насчет этого?

| tokens |
tokens := 'this is a selector' findTokens: Character space.
tokens allButFirst
    inject: tokens first
    into: [:selector :token | selector, token capitalized]
3 голосов
/ 23 февраля 2011

Я не думаю, что есть существующий метод, делающий это.

Вот реализация, которая решает вашу проблему:

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 ] ] ].

Редактировать: примечание, в сравнениидля решения Фрэнка это длиннее, но оно не прерывается для пустого ввода, и оно не создает новый экземпляр строки для каждого шага , так как он передается по входу, что более эффективно (в случае, если у вас большойстроки).

1 голос
/ 23 января 2016

Вы не говорите, какую версию Pharo вы используете, но в стабильной версии 5.0

'hello world this is a selector' asCamelCase asValidSelector

дает

helloWorldThisIsASelector

Чтобы получить то, что я использую, запустите:

curl get.pharo.org/50+vm | bash 
0 голосов
/ 21 января 2016

Я знаю, что это старый, но Squeak имеет полезную реализацию (String >> asCamelCase), которая в основном делает это:

(String
    streamContents: [:stream | 'hello world' substrings
            do: [:sub | stream nextPutAll: sub capitalized]]) asLegalSelector
...