programing

문자열의 첫 글자를 루비로 대문자화하는 방법

bestprogram 2023. 6. 11. 11:04

문자열의 첫 글자를 루비로 대문자화하는 방법

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제대로, 당신은 텍스트가 어떤 언어로 되어 있는지 알아야 합니다.예를 들어, 영어는 단지 두개를 가지고 있습니다.is: 자본I티끌 하나 없이i점으로하지만 터키어는 4개야is: 자본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,그리고.swapcaseRuby 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