2013-01-23 33 views
2

一些規則的第一個字符:必須使用大寫(未upcase或任何其他表達式)紅寶石利用與空間

粘貼在以下:

 
string = <<-HERE 
       i love tacos. I hear 
    they are delicious and nutritious 

HERE 

我需要利用每一行的第一個字與空白時遇到了問題搞清楚如何完成它:

輸出需要看如下:

 
       I love tacos. I hear 
    They are delicious and nutritious 

任何指導或幫助將不勝感激。我甚至會指出正確的方向而不是回答!

+3

現在我想要炸玉米餅。 –

+0

你是什麼意思「大寫空白」? – sawa

回答

1

這項工作?

string = <<-HERE 
       i love tacos. I hear 
    they are delicious and nutritious 

HERE 

string.gsub!(/(^\s*)(\w)/) do |match| 
    $1 << $2.capitalize 
end 

這是試圖做的是拆分字符串換行符,搜索第一個字母,大寫它,並重新加入片段。

這將產生:

>   I love tacos. I hear 
    They are delicious and nutritious 
+0

它確實有效,但我的問題是:完全可以在不定義新字符串的情況下完成此操作嗎?根據我的指示:您正在使用the_string的原始未修改版本。 某些行有前導空格,您不能刪除。另外,你真棒! – jtm

+0

我編輯它,這個新版本應該工作。 –

+0

我試圖堅持你的'沒有upcase'規範,但如果你打開使用它,這裏的其他答案很好,緊湊:)如果你的問題與性能有關,你也可以通過char來評估char。 –

6

這裏是一個一行,做你的要求爲:

string.gsub(/^\s*\w/) {|match| match.upcase }

我知道你說 「不upcase」,但在這種情況下,它只是提升第一個字母。如果您對此有任何疑問,請告知我們。

爲了解決您對其他答案的評論,您始終可以使用gsub!來突變字符串,而無需創建副本。

+0

Drat!當我刷新時,你擊敗了我:D – arbales

3
string.gsub!(/^\s*\w/){|match| match.upcase} 

這將做你想要的,而不會創建新的字符串。