문자열의 첫 글자를 루비로 대문자화하는 방법
그upcase
메서드는 전체 문자열을 대문자로 표시하지만 첫 번째 문자만 대문자로 표시하면 됩니다.
또한 독일어와 러시아어와 같은 인기 있는 언어도 지원해야 합니다.
제가 그걸 어떻게 합니까?
사용하는 Ruby 버전에 따라 다릅니다.
Ruby 2.4 이상:
Ruby v2.4.0은 유니코드 대소문자 매핑을 지원하므로 다음과 같이 작동합니다.
"мария".capitalize #=> Мария
Ruby 2.3 이하:
"maria".capitalize #=> "Maria"
"мария".capitalize #=> мария
문제는, 그것이 단지 당신이 원하는 것을 하지 않고, 그것이 출력한다는 것입니다.мария
대신에Мария
.
레일즈를 사용하는 경우 다음과 같은 간단한 해결 방법이 있습니다.
"мария".mb_chars.capitalize.to_s # requires ActiveSupport::Multibyte
그렇지 않으면 유니코드 보석을 설치하고 다음과 같이 사용해야 합니다.
require 'unicode'
Unicode::capitalize("мария") #=> Мария
루비 1.8:
코딩 매직 코멘트를 사용해야 합니다.
#!/usr/bin/env ruby
puts "мария".capitalize
기브즈invalid multibyte char (US-ASCII)
반면:
#!/usr/bin/env ruby
#coding: utf-8
puts "мария".capitalize
오류 없이 작동하지만 실제 자본화는 "루비 2.3 이하" 섹션을 참조하십시오.
문자열 첫 단어의 첫 글자를 대문자로 표시합니다.
"kirk douglas".capitalize
#=> "Kirk douglas"
각 단어의 첫 글자를 대문자로 표시합니다.
레일:
"kirk douglas".titleize
=> "Kirk Douglas"
OR
"kirk_douglas".titleize
=> "Kirk Douglas"
루비 단위:
"kirk douglas".split(/ |\_|\-/).map(&:capitalize).join(" ")
#=> "Kirk Douglas"
OR
require 'active_support/core_ext'
"kirk douglas".titleize
레일 5+
Active Support 및 Rails 5.0.0.beta4의 경우 다음 두 가지 방법 중 하나를 사용할 수 있습니다.String#upcase_first
또는ActiveSupport::Inflector#upcase_first
.
"my API is great".upcase_first #=> "My API is great"
"мария".upcase_first #=> "Мария"
"мария".upcase_first #=> "Мария"
"NASA".upcase_first #=> "NASA"
"MHz".upcase_first #=> "MHz"
"sputnik".upcase_first #=> "Sputnik"
자세한 내용은 "Rails 5: New upcase_first Method"를 확인하십시오.
자, 단지 우리가 첫 글자만 대문자로 쓰고 나머지는 그냥 두는 방법을 알기 위해서입니다. 왜냐하면 때때로 그것이 필요하기 때문입니다.
['NASA', 'MHz', 'sputnik'].collect do |word|
letters = word.split('')
letters.first.upcase!
letters.join
end
=> ["NASA", "MHz", "Sputnik"]
부르기capitalize
결과적으로["Nasa", "Mhz", "Sputnik"]
.
불행하게도 기계가 제대로 뒤집기/다운 뒤집기/자본화하는 것은 불가능합니다.컴퓨터가 이해하기에는 너무 많은 상황 정보가 필요합니다.
그래서 루비가.String
클래스는 ASCII 문자에 대해서만 대문자화를 지원합니다. 적어도 어느 정도 잘 정의되어 있기 때문입니다.
"상황별 정보"란 무엇을 의미합니까?
예를 들어, 대문자화하기i
제대로, 당신은 텍스트가 어떤 언어로 되어 있는지 알아야 합니다.예를 들어, 영어는 단지 두개를 가지고 있습니다.i
s: 자본I
티끌 하나 없이i
점으로하지만 터키어는 4개야i
s: 자본I
점 하나 없이, 자본.İ
점이 있는 작은ı
점 없이, 작은i
점으로그래서 영어로.'i'.upcase # => 'I'
그리고 터키어로.'i'.upcase # => 'İ'
다른 말로 하면:'i'.upcase
언어에 따라 두 가지 다른 결과를 반환할 수 있습니다. 언어를 모르면 단어를 정확하게 대문자로 쓰는 것은 분명히 불가능합니다.
하지만 루비는 언어를 모르고, 인코딩만 알고 있습니다.따라서 Ruby의 내장 기능으로는 문자열을 제대로 대문자화하는 것이 불가능합니다.
상황이 더 나빠집니다. 언어를 안다고 해도 대문자화를 제대로 하는 것은 때때로 불가능합니다.예를 들어, 독일어로,'Maße'.upcase # => 'MASSE'
(Maße는 측정을 의미하는 Maß의 복수형입니다.)하지만,'Masse'.upcase # => 'MASSE'
(질량을 의미함).그래서, 무엇이'MASSE'.capitalize
즉, 정확한 자본화를 위해서는 본격적인 인공지능이 필요합니다.
따라서 Ruby는 때때로 오답을 하는 대신에, 때때로 전혀 대답을 하지 않는 것을 선택합니다. 따라서 ASCII가 아닌 문자는 다운케이스/업케이스/자본화 작업에서 무시됩니다.(물론 잘못된 결과도 읽히지만, 적어도 확인하기는 쉽습니다.)
사용하다capitalize
문자열 문서에서 다음을 수행합니다.
첫 번째 문자가 대문자로 변환되고 나머지 문자가 소문자로 변환된 str의 복사본을 반환합니다.
"hello".capitalize #=> "Hello"
"HELLO".capitalize #=> "Hello"
"123ABC".capitalize #=> "123abc"
사용할 수 있습니다.mb_chars
이것은 최고를 존중합니다.
class String
# Only capitalize first letter of a string
def capitalize_first
self[0] = self[0].mb_chars.upcase
self
end
end
예:
"ümlaute".capitalize_first
#=> "Ümlaute"
내 버전:
class String
def upcase_first
return self if empty?
dup.tap {|s| s[0] = s[0].upcase }
end
def upcase_first!
replace upcase_first
end
end
['NASA title', 'MHz', 'sputnik'].map &:upcase_first #=> ["NASA title", "MHz", "Sputnik"]
다음 항목도 확인:
https://www.rubydoc.info/gems/activesupport/5.0.0.1/String%://www.rubydoc.info/gems/activesupport/5.0.0.1/String%3Aupcase_first
https://www.rubydoc.info/gems/activesupport/5.0.0.1/ActiveSupport/Inflector#://www.rubydoc.info/gems/activesupport/5.0.0.1/ActiveSupport/Inflector#upcase_first-instance_method
다음은 문자열의 각 단어를 대문자로 표시하는 또 다른 방법입니다. \w
키릴 문자나 라틴 문자와 분음 부호가 일치하지 않지만[[:word:]]
다한.upcase
,downcase
,capitalize
,그리고.swapcase
Ruby 2.가 아닌 되지 않았습니다.
"aAa-BBB ä мария _a a_a".gsub(/\w+/,&:capitalize)
=> "Aaa-Bbb ä мария _a A_a"
"aAa-BBB ä мария _a a_a".gsub(/[[:word:]]+/,&:capitalize)
=> "Aaa-Bbb Ä Мария _a A_a"
[[:word:]]
다음 범주의 문자와 일치합니다.
Ll (Letter, Lowercase)
Lu (Letter, Uppercase)
Lt (Letter, Titlecase)
Lo (Letter, Other)
Lm (Letter, Modifier)
Nd (Number, Decimal Digit)
Pc (Punctuation, Connector)
[[:word:]]
관문개, 커터넥는다에니일모합치두문와자있는)"(개")에 의 문자 합니다.Pc
범주:
005F _ LOW LINE
203F ‿ UNDERTIE
2040 ⁀ CHARACTER TIE
2054 ⁔ INVERTED UNDERTIE
FE33 ︳ PRESENTATION FORM FOR VERTICAL LOW LINE
FE34 ︴ PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
FE4D ﹍ DASHED LOW LINE
FE4E ﹎ CENTRELINE LOW LINE
FE4F ﹏ WAVY LOW LINE
FF3F _ FULLWIDTH LOW LINE
다음은 문자열의 첫 번째 문자만 대문자로 변환하는 또 다른 방법입니다.
"striNG".sub(/./,&:upcase)
=> "StriNG"
저자가 요청한 대로 문자열의 첫 번째 문자만 대문자로 표시하려면 다음과 같이 해야 합니다.
word[0] = word[0].upcase
이것은 모든 언어에 적용되며 전체 문자열의 첫 글자만 터치합니다.
word = "мария"
# => "мария"
word[0] = word[0].upcase
# => "М"
word
# => "Мария"
레일이나 다른 라이브러리가 필요하지 않습니다.
언급URL : https://stackoverflow.com/questions/3724913/how-to-capitalize-the-first-letter-in-a-string-in-ruby
'programing' 카테고리의 다른 글
사용자 정의 양식에서 Django 시간/날짜 위젯 사용 (0) | 2023.06.11 |
---|---|
오류 TS1243: 'async' 수정자를 'abstract' 수정자와 함께 사용할 수 없습니다. (0) | 2023.06.11 |
c/c++ 프로그램에서 가능한/잠재적인 스택 오버플로 문제를 감지하는 방법은 무엇입니까? (0) | 2023.06.11 |
npm에서 Firebase를 사용하여 배포하는 중 오류 발생 -- 접두사 $RESOURCE_DIR 런 린트 (0) | 2023.06.11 |
빈 셀이 포함된 Excel 스프레드시트를 읽기 위해 NPOI를 사용하는 방법은 무엇입니까? (0) | 2023.06.11 |