# Setting string width

**URL:** <https://www.ruby-forum.com/t/setting-string-width/125967>\
**Category:** Ruby\
**Created:** [January 14, 2008, 10:02am UTC](https://www.ruby-forum.com/t/setting-string-width/125967 "2008-01-14T10:02:59Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 10:02am UTC](https://www.ruby-forum.com/t/setting-string-width/125967/1 "2008-01-14T10:02:59Z")

</div>

Hi there,Just a quick question …  
I’d like to insert newlines into a string around every 80ish  
character and those newlines shouldnt cut the words in the middle. Can  
anybody post a snippet how to do that  
TIA  
hurcan

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 10:42am UTC](https://www.ruby-forum.com/t/setting-string-width/125967/2 "2008-01-14T10:42:15Z")

</div>

Hurcan

The following adds a method to the string class called wrap which wraps  
a  
string at the specified width broken on a space but honouring line  
endings

class String  
def wrap(width)  
gsub(/(.{1,#{width}})(\s+|\Z)/, “\1\n”)  
end  
end

s = “Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas  
cursus cursus enim. Ut sit amet metus at lacus consectetuer condimentum.  
Suspendisse nulla arcu, varius eget, consequat id, sodales sit amet,  
turpis.  
Etiam ornare felis id augue. Morbi eleifend sem nec odio. Aenean augue  
dui,  
placerat et, porta tincidunt, accumsan vitae, tortor. Ut et nulla et  
diam  
gravida eleifend. Nulla fermentum ligula nec tellus. Donec quis purus id  
nisl blandit fermentum. Nunc commodo metus sit amet tortor. Nam lacus  
quam,  
ultricies sit amet, fermentum at, dictum eget, metus.”

puts s.wrap(80)

Andrew T.  
removed\_email\_address@domain.invalid  
082 415 8283  
skype: andrewtimberlake

“I have never let my schooling interfere with my education.”  
–Mark Twain

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 10:44am UTC](https://www.ruby-forum.com/t/setting-string-width/125967/3 "2008-01-14T10:44:35Z")

</div>

From: “hurcan solter” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Hi there,Just a quick question …  
> I’d like to insert newlines into a string around every 80ish  
> character and those newlines shouldnt cut the words in the middle. Can  
> anybody post a snippet how to do that

Here’s one way to do it:

string.gsub(/(.{75,}?\S\*)\s+/, “\1\n”)

It meets the criteria of “around every 80ish character”… 🙂

Regards,

Bill

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 11:19am UTC](https://www.ruby-forum.com/t/setting-string-width/125967/4 "2008-01-14T11:19:17Z")

</div>

From: “Andrew T.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> gsub(/(.{1,#{width}})(\s+|\Z)/, “\1\n”)

Ah, nice.

Regards,

Bill

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 12:36pm UTC](https://www.ruby-forum.com/t/setting-string-width/125967/5 "2008-01-14T12:36:45Z")

</div>

yes yes the word was “the word wrap” .Silly me  
thanks for the responses though…

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 10:53am UTC](https://www.ruby-forum.com/t/setting-string-width/125967/6 "2008-01-14T10:53:24Z")

</div>

On Jan 14, 2008, at 10:00 AM, hurcan solter wrote:

> I’d like to insert newlines into a string around every 80ish  
> character and those newlines shouldnt cut the words in the middle. Can  
> anybody post a snippet how to do that

require ‘facets’  
str.word\_wrap!

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 12:47pm UTC](https://www.ruby-forum.com/t/setting-string-width/125967/7 "2008-01-14T12:47:56Z")

</div>

On Jan 14, 2008 11:18 AM, Bill K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> From: “Andrew T.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> > gsub(/(.{1,#{width}})(\s+|\Z)/, “\1\n”)
> 
> Ah, nice.

I know you have been served well but I would like to take advantage to  
point to a RubyQuiz as there are surprisingly often  
answers to Ruby programming questions. Yours was handled here  
[http://rubyquiz.com/quiz113.html](http://rubyquiz.com/quiz113.html)

BTW James, will the Quiz page remain available after your retierement?

Cheers  
Robert

* * *

Whereof one cannot speak, thereof one must be silent.  
Ludwig Wittgenstein

---

<div class="post-metadata">

**Author:** ![hurcan\_solter](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a88e4f/32.png) [@hurcan\_solter](https://www.ruby-forum.com/u/hurcan_solter)\
**Post date:** [January 14, 2008, 2:21pm UTC](https://www.ruby-forum.com/t/setting-string-width/125967/8 "2008-01-14T14:21:14Z")

</div>

On Jan 14, 2008, at 5:45 AM, Robert D. wrote:

> BTW James, will the Quiz page remain available after your retierement?

Absolutely.

James Edward G. II
