# "capitalize" also letters after "-"?

**URL:** <https://www.ruby-forum.com/t/capitalize-also-letters-after/137239>\
**Category:** Ruby\
**Created:** [May 10, 2008, 3:53pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239 "2008-05-10T15:53:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 10, 2008, 3:53pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239/1 "2008-05-10T15:53:26Z")

</div>

Hi, I receive strings like:

content-language  
accept-resource-priority

and I want to “capitalize” them in this way:

Content-Language  
Accept-Resource-Priority

But String#capitalize method just capitalized first letter:

Content-language  
Accept-resource-priority

Is there any “fast” method for what I want?  
Yes, I could implement it extending String class or my own class \<  
String, but  
performance is very important and I’d prefer using a method written in C  
(as “String#capitalized”). Does is exist?

Thanks a lot.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 10, 2008, 4:34pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239/2 "2008-05-10T16:34:48Z")

</div>

On Sat, May 10, 2008 at 10:52 PM, Iñaki Baz C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> But String#capitalize method just capitalized first letter:
> 
> Thanks a lot.
> 
> –  
> Iñaki Baz C.

Is this too slow?

str = “accept-resource-priority”  
p str.split(/-/).map {|x| x.capitalize}.join(“-”)

Harry

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 10, 2008, 5:03pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239/3 "2008-05-10T17:03:15Z")

</div>

El Sábado, 10 de Mayo de 2008, Harry K.  
escribió:\> \>

> > 
> 
> p str.split(/-/).map {|x| x.capitalize}.join("-")  
> Hummm:

Benchmark.realtime { “accept”.capitalize }  
=\> 2.21729278564453e-05

Benchmark.realtime { “accept”.split(’-’).map {|w|  
w.capitalize}.join(’-’) }  
=\> 3.69548797607422e-05

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 10, 2008, 5:26pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239/4 "2008-05-10T17:26:14Z")

</div>

On Sat, 10 May 2008, IÃ±aki Baz C. wrote:

> But String#capitalize method just capitalized first letter:
> 
> Content-language  
> Accept-resource-priority
> 
> Is there any “fast” method for what I want?  
> Yes, I could implement it extending String class or my own class \< String, but  
> performance is very important and I’d prefer using a method written in C  
> (as “String#capitalized”). Does is exist?

I have to express healthy skepticism as to whether performance is _so_  
critical that you can’t just do:

str.gsub!(/((^|-).)/) { $1.upcase }

and if it is, then I’ll express healthy skepticism as to whether or  
not Ruby is the right language for the job 🙂

I don’t know of any C library that does the above, so if you need it,  
you should probably go ahead and write it. You can base it off  
rb\_capitalize(\_bang).

David

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 10, 2008, 5:49pm UTC](https://www.ruby-forum.com/t/capitalize-also-letters-after/137239/5 "2008-05-10T17:49:13Z")

</div>

El SÃ¡bado, 10 de Mayo de 2008, David A. Black escribiÃ³:

> I have to express healthy skepticism as to whether performance is _so_  
> critical that you can’t just do:
> 
> str.gsub!(/((^|-).)/) { $1.upcase }

Thanks, but it seems slower than using “split”/“join”:

Benchmark.realtime { “accept-asdasd-qweqwe”.split(’-’).map {|w|  
w.capitalize}.join(’-’) }  
=\> 3.09944152832031e-05

Benchmark.realtime { “accept-asdasd-qweqwe”.gsub!(/((^|-).)/) {  
$1.upcase } }  
=\> 3.60012054443359e-05

> and if it is, then I’ll express healthy skepticism as to whether or  
> not Ruby is the right language for the job 🙂

Good response 🙂

> I don’t know of any C library that does the above, so if you need it,  
> you should probably go ahead and write it. You can base it off  
> rb\_capitalize(\_bang).

ok, I’ll keep this as an alternative 😉

Thanks a lot.
