Saya perlu membuat karakter pertama dari setiap huruf besar, dan membuat huruf kecil lainnya ...
manufacturer.MFA_BRAND.first.upcase
hanya mengatur huruf besar pertama, tetapi saya perlu ini:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
split
akan terpecah pada ruang secara default, sehingga Anda dapat membuatnya lebih pendek:'one TWO three foUR'.split.map(&:capitalize).join(' ')
.map(&:capitalize)
atau setidaknya menunjuk ke tempat di mana Anda menemukannya? Saya tidak dapat menemukan referensi untuk itu. Juga, apa masalahnya dengan*' '
di akhir cuplikan kode kedua?&:method
sintaks dalammap
adalah cara ringkas untuk memanggil metode pada setiap item dalam array . Anda kemudian dapat memanggiljoin
untuk mengubah array itu menjadi string. Ini* ' '
adalah cara alternatif untuk memanggil gabung . Anda bisa menganggapnya sebagai mengalikan item dalam array bersama-sama untuk membuat string.Dalam Rails:
tanpa rel:
w / o Rails (memuat ActiveSupport rel untuk mem-patch metode #titleize ke
String
)(beberapa) kasus penggunaan string ditangani oleh #titleize
#titleize gotchas
Rails
titleize
akan mengubah hal-hal seperti tanda hubung dan garis bawah menjadi spasi dan dapat menghasilkan hasil tak terduga lainnya, terutama dengan situasi case-sensitive seperti yang ditunjukkan oleh @JamesMcMahon:karena ini dimaksudkan untuk menangani kode cased camel seperti:
Untuk menangani casing tepi ini, Anda dapat membersihkan string Anda
#downcase
terlebih dahulu sebelum menjalankan #titleize. Tentu saja jika Anda melakukannya, Anda akan menghapus setiap pemisahan kata camelCased:sumber
"hello world".titleize
yang seharusnya menampilkan "Hello World".sumber
"One Two Three Fo Ur"
yang berbeda dari output yang diinginkan dalam hal ini, tetapi mungkin diinginkan pada yang lain.Pilihan lain adalah menggunakan regex dan gsub, yang membutuhkan blok:
sumber
.gsub(/\b\w/, &:capitalize)
mempertahankan kapitalisasi yang dimaksudkan dalam kata-kata, misalnya "Jane mcCollins"Lihatlah metode string # capitalize.
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
sumber
sumber
each
blok sedang dibuang. The!
memodifikasi string yang diproduksi olehsplit
in-place. Tanpa itu!
,capitalize
akan membuat satu string kapital baru per iterasi, dan kemudian segera membuangnya. Hasil akhirnya akan"hello world"
, sama seperti string asli. Dengan!
, setiap string dalamsplit
array sedang diubah, dan oleh karena itu hasilnyaeach
adalah array dari string kapital.map
. Retas yang menarik. PoinJika Anda mencoba menggunakan huruf kapital untuk huruf pertama dari setiap kata dalam sebuah array, Anda cukup menuliskannya:
array_name.map (&: capitalize)
sumber
Saya menggunakan ini untuk masalah yang sama:
Ini menangani kasus aneh berikut yang saya lihat mencoba jawaban sebelumnya:
sumber