1

単純な抽象的な入力フォームがあり、その目的は、任意の文字で構成される文字列を受け入れることを想像してみましょう。

string = "mystical characters"

最初の文字を大文字にして、この文字列を処理する必要があります。はい、それが私たちの主な目標です。その後、この変換された文字列を抽象ビュー テンプレートに表示する必要があります。問題は、最初の文字がすでに正しく (大文字で) 書かれているのか、それともこれだけ書けるのかを本当にチェックする必要があるのか​​ということです。

theresult = string.capitalize
=> "Mystical characters"

チェックしてから大文字にする(必要な場合)か、強制的に大文字にするか、どちらのアプローチが優れていますか?

4

6 に答える 6

7

String#capitalizeは最初の文字を大文字に変換するだけでなく、他のすべての文字も小文字に変換するため、何かを処理する必要があるかどうかを最初に確認してください。そう..

"First Lastname".capitalize == "First lastname"

それは望んでいた結果ではないかもしれません。

于 2011-01-20T01:51:39.570 に答える
4

私が正しく理解していれば、とにかく文字列を大文字にするつもりなので、すでに大文字になっているかどうかをわざわざチェックする必要はありません。

于 2011-01-20T01:50:21.647 に答える
2

Tonttuの回答に基づいて、あまり心配せず、次のように大文字にすることをお勧めします。

new_string = string[0...1].capitalize + string[1..-1]
于 2011-01-20T02:48:15.760 に答える
1

たくさんの名前をインポートするTonttuの問題に遭遇しました。

  strs = "first lastname".split(" ")
  return_string = ""
  strs.each do |str|
    return_string += "#{str[0].upcase}#{str[1..str.length].downcase} "
  end
  return_string.chop

EDIT:避けられないリファクタリング(1年以上)。

  "first lastname".split(" ").map do |str| 
    "#{str[0].upcase}#{str[1..str.length].downcase}"
  end.join(' ')

間違いなく読みやすくはありませんが、より少ない一時変数を宣言しても同じ結果が得られます。

于 2011-02-06T20:35:20.883 に答える
0

私はあなたが次のようなものを書くことができると思います:

string.capitalize unless string =~ /^[A-Z].*/

個人的に私はちょうどやります

文字列。大文字にする

于 2011-01-20T01:49:20.727 に答える
0

チェックせずに大文字にするだけでなく、チェックする大文字の文字列にフラグを設定する場合を除きます。

また、大文字化自体もおそらく何らかのチェックを行っています。

于 2011-01-20T02:29:54.787 に答える