답변:
이 시도:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
또는
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
.map(&:capitalize)
문서에서 그것을 찾은 곳을 적어도 설명 할 수 있습니까? 그것에 대한 참조를 찾을 수 없습니다. 또한 *' '
두 번째 코드 스 니펫의 끝 부분에서 처리는 무엇 입니까?
&:method
구문 은 배열의 각 항목에서 메소드를 호출map
하는 간결한 방법 입니다. 그런 다음 join
해당 배열을 문자열로 변환하기 위해 호출 할 수 있습니다 . 는 * ' '
입니다 가입 호출하는 또 다른 방법 . 배열의 항목을 곱하여 문자열을 만드는 것으로 생각할 수 있습니다.
레일에서 :
"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'
레일없이 :
"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")
#OBJECT IT OUT
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end
#OR MONKEY PATCH IT
class String
def titleize
self.split(/ |\_/).map(&:capitalize).join(" ")
end
end
Rails 없음 (#titleize 메소드를 패치하기 위해 Rails의 ActiveSupport로드 String
)
require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"
Rails titleize
는 대시 및 밑줄과 같은 것을 공백으로 변환하고 특히 @JamesMcMahon이 지적한 대소 문자 구분 상황에서 예기치 않은 다른 결과를 생성 할 수 있습니다.
"hEy lOok".titleize #=> "H Ey Lo Ok"
다음과 같은 낙타 케이스 코드를 처리하기 때문입니다.
"kirkDouglas".titleize #=> "Kirk Douglas"
이 경우를 처리하기 위해 #downcase
#titleize를 실행하기 전에 먼저 문자열을 정리할 수 있습니다 . 물론 그렇게한다면 낙타에서 분리 된 단어를 지우 게됩니다 :
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
"hello world".titleize
"Hello World"를 출력해야합니다.
"One Two Three Fo Ur"
은 원하는 출력과 다르지만 다른 출력에서는 바람직 할 수 있습니다.
또 다른 옵션은 정규 표현식과 gsub를 사용하는 것입니다.
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
.gsub(/\b\w/, &:capitalize)
보존 단어에서 대문자를 목적으로, 예를 들면 "제인 mcCollins"
String # capitalize 메소드를 살펴보십시오.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
"hello world".split.each{|i| i.capitalize!}.join(' ')
each
블록 의 각 반복에 대한 리턴 값 이 삭제됩니다. 는 !
에 의해 생성 된 문자열 수정되어 split
제자리를. 포함하지 않는 !
, capitalize
그것을 폐기 즉시 다음 반복 당 하나의 새로운 대문자 문자열을 생성하고있을 것이다. 최종 결과는 "hello world"
원래 문자열과 동일합니다. 을 사용하면 'd 배열 !
의 각 문자열 split
이 변경되므로 결과 each
는 대문자 문자열의 배열입니다.
map
합니다. 재미있는 해킹. 포인트
비슷한 문제에 이것을 사용했습니다.
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
이것은 이전 답변을 시도한 다음과 같은 이상한 경우를 처리합니다.
split
기본적으로 공간으로 분할되므로 더 짧게 만들 수 있습니다.'one TWO three foUR'.split.map(&:capitalize).join(' ')