0

Rubyで文字列に対して文字列操作をしようとしています。目標は、文字列の残りの部分に影響を与えずに、最初の 100 文字のみを削除、反転、スクイーズ、大文字化することです。

これが私たちが扱う文字列です。行番号は文字列の一部です。割り当てでは、この文字列は「the_string」と呼ばれます。

1.               this string has leading space and too    "MANY tabs and sPaCes betweenX"
2.   thE indiVidual Words in each Line.X
3.  eacH Line ends with a accidentally  aDDED   X.X
4.            in this lab you wilL WRITE code that "sAnITizES" this string by normalizingX
5.   ("nOrMaLiZiNg" means   capitalizing sentences   and setting otherX
6.  characterS to lower case)     and removes         the extra spaces between WOrds.X

これが私が取り組んでいるものです:

puts the_string[0,100].strip.squeeze.reverse.upcase 

そして出力:

I EHT .2
"XNEWTEB SECAPS DNA SBAT YNAM" OT DNA ECAPS GNIDAEL SAH GNIRTS SIHT .1

これは、文字列から残りの文字 (100 以降) を削除するのではなく、そのままにして変更しないことを除いて、私が望むように機能しています。さらに、object_id を変更することは想定されていないため、この問題を解決するために新しい文字列を作成することはできません。私が求める出力は次のとおりです。

I EHT .2
"XNEEWTEB SECAPS DNA SBAT YNAM" OOT DNA ECAPS GNIDAEL SAH GNIRTS SIHT .1ndiVidual Words in each Line.X
3.  eacH Line ends with a accidentally  aDDED   X.X
4.            in this lab you wilL WRITE code that "sAnITizES" this string by normalizingX
5.   ("nOrMaLiZiNg" means   capitalizing sentences   and setting otherX
6.  characterS to lower case)     and removes         the extra spaces between WOrds.X

これを簡単にする方法があると確信していますが、エレガントなソリューションを発見していません。どんな助けでも大歓迎です!

4

2 に答える 2

2

Range を指定することで、文字列内の部分文字列を置き換えることができます。

[1] pry(main)> string = "1234567890"
=> "1234567890"
[2] pry(main)> string.object_id
=> 70248091185880
[3] pry(main)> string[0...5]="abcde"
=> "abcde"
[4] pry(main)> string
=> "abcde67890"
[5] pry(main)> string.object_id
=> 70248091185880

したがって、コードは次のようになります。

the_string[0...100] = the_string[0,100].strip.squeeze.reverse.upcase 
于 2015-01-22T21:46:27.727 に答える
0

私は次の方法で質問に答えました:

substring = the_string[0,100].strip.squeeze.reverse.upcase 
the_string[0,100] = substring
puts the_string
于 2015-01-22T21:51:04.120 に答える