<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>String Manipulation（文字列操作） | エンジニアライブログ</title>
	<atom:link href="https://tomoyuki65.com/tag/string-manipulation/feed" rel="self" type="application/rss+xml" />
	<link>https://tomoyuki65.com</link>
	<description></description>
	<lastBuildDate>Wed, 29 Jun 2022 22:54:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://tomoyuki65.com/tag/string-manipulation/feed"/>
	<item>
		<title>【Ruby入門】文字列のメソッドを使う！破壊的メソッドや%記法【#5】</title>
		<link>https://tomoyuki65.com/introduction-to-ruby-5</link>
					<comments>https://tomoyuki65.com/introduction-to-ruby-5#respond</comments>
		
		<dc:creator><![CDATA[Tomoyuki]]></dc:creator>
		<pubDate>Tue, 01 Aug 2017 22:03:52 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Introduction（入門）]]></category>
		<category><![CDATA[String Manipulation（文字列操作）]]></category>
		<guid isPermaLink="false">https://tomoyuki65.com/?p=476</guid>

					<description><![CDATA[<p>こんにちは。Tomoyuki（@tomoyuki65）です。 みなさん、文字列オブジェクトのメソッドを使ったことはありますか？ &#160; 文字列オブジェクトのメソッドを使うと、文字列に対して様々な処理をすることができ...</p>
The post <a href="https://tomoyuki65.com/introduction-to-ruby-5">【Ruby入門】文字列のメソッドを使う！破壊的メソッドや%記法【#5】</a> first appeared on <a href="https://tomoyuki65.com">エンジニアライブログ</a>.]]></description>
										<content:encoded><![CDATA[<hr />
<p>こんにちは。Tomoyuki（<a href="https://twitter.com/tomoyuki65" target="_blank" rel="noopener">@tomoyuki65</a>）です。</p>
<p>みなさん、文字列オブジェクトのメソッドを使ったことはありますか？</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong><span style="background-color: #ffc6d1;">文字列オブジェクトのメソッドを使うと、文字列に対して様々な処理をすることができるんです！</span></strong></span></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">※ただし、Ruby特有の破壊的なメソッドもあるので注意が必要です。</span></p>
<p>&nbsp;</p>
<p>この記事では、文字列操作について解説します。</p>
<p>&nbsp;</p>
<p><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9453826382162914" data-ad-slot="5514976097"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<h2>文字列操作</h2>
<h3>upcaseメソッド</h3>
<p>では実際に文字列操作を行ってみましょう。</p>
<p>まずは例として、文字列中の小文字を大文字にするメソッド「upcase」を使ってみます。</p>
<p>以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># upcaseメソッド
str = "tanaka"
p str.upcase    # pメソッドはデバッグ出力用（データ形式がわかるため便利です）
p str</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
&#8220;TANAKA&#8221;<br />
&#8220;tanaka&#8221;<br />
</div>
<p>&nbsp;</p>
<p>実行結果の通り、upcaseメソッドにより「str.upcase」では大文字に変換されて出力されました。</p>
<p>※今回はpメソッドを使っているため、「&#8221;」も含めて出力されています。</p>
<p>&nbsp;</p>
<h3>include?メソッド、lengthメソッド</h3>
<p>次はinclude?メソッドとlengthメソッドを使ってみましょう。</p>
<p>include?メソッドは、文字列中に<span style="border-bottom: 2px solid #be3144;"><strong>特定の文字列が存在した場合に真偽値の「true」</strong></span>を返します。</p>
<p>そしてlengthメソッドは、<span style="border-bottom: 2px solid #be3144;"><strong>文字列のバイト数</strong></span>を返します。</p>
<p>&nbsp;</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># 文字列中に「東京」が存在するかをチェックし、存在したら「true」を返す
p "今日は東京でラーメンを食べたよ！".include?("東京")
p "今日は札幌でラーメンを食べたよ！".include?("東京")

# 文字列の文字数を返すメソッド
p "Hello World!".length</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
true<br />
false<br />
12<br />
</div>
<p>&nbsp;</p>
<p>実行結果の通り、メソッドの使い方を覚えることで文字列に対して様々な処理ができます。</p>
<p>メソッドは沢山あるので、必要なものから覚えましょう。</p>
<p>&nbsp;</p>
<p>尚、今回「include?」のように<span style="border-bottom: 2px solid #be3144;"><strong>「?」がついたメソッド</strong></span>を使いました。</p>
<p>これは、<span style="border-bottom: 2px solid #be3144;"><strong>真偽値を返すメソッドで条件判定</strong></span>などに使われます。</p>
<p>条件が<span style="border-bottom: 2px solid #be3144;"><strong>真（成り立つ）の時は「true」、偽の時は「false」</strong></span>を返します。</p>
<p>&nbsp;</p>
<h3>破壊的メソッドとは？</h3>
<p>Rubyには「!」の付くメソッドが存在します。</p>
<p>この「!」が付くメソッドを<span style="color: #ff0000;"><strong>「破壊的メソッド」</strong></span>と呼び、<span style="color: #ff0000;"><strong>使い方には注意が必要</strong></span>です。</p>
<p>&nbsp;</p>
<p>例として、上記で出てきたupcaseメソッドにも破壊的メソッドが存在するので使ってみましょう。</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># 各変数に値を代入
str = "tanaka"
str2 = str

# 各変数を出力
p str
p str2

# upcase!メソッド
p str.upcase!

# 各変数を出力
p str
p str2</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
&#8220;tanaka&#8221;<br />
&#8220;tanaka&#8221;<br />
&#8220;TANAKA&#8221;<br />
&#8220;TANAKA&#8221;<br />
&#8220;TANAKA&#8221;<br />
</div>
<p>&nbsp;</p>
<p>実行結果の通り、「upcase!」メソッド実行後に、変数の「str」と「str2」の値も上書きされてしまいました。</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt;"><strong><span style="color: #ff0000;">このように、破壊的メソッドは元のオブジェクトを書き換えてしまうので、使用する際には注意が必要です。</span></strong></span></p>
<p>&nbsp;</p>
<p>特に変数「str」を代入した「str2」も上書きされてしまっている点には注意しなければなりません。</p>
<p>これは<a href="https://tomoyuki65.com/introduction-to-ruby-2" target="_blank" rel="noopener">【Ruby入門】変数とは？変数名の付け方やスコープについて【#2】</a>で説明した通り、<strong>「変数はラベルのようなもの」</strong>という表現に表れています。</p>
<p>&nbsp;</p>
<h3>破壊的メソッドのイメージ</h3>
<p>通常の場合と破壊的メソッドの場合の違いについて、図を参考に解説します。</p>
<p>まずは以下の図１をご覧下さい。</p>
<p>&nbsp;</p>
<p>図１：代入のイメージ</p>
<img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-514" style="border: 1px solid #a9a9a9;" src="https://tomoyuki65.com/wp-content/uploads/2017/08/0f75d36e9c10b8974484ba5147b185e3.jpg" alt="" width="801" height="481" srcset="https://tomoyuki65.com/wp-content/uploads/2017/08/0f75d36e9c10b8974484ba5147b185e3.jpg 801w, https://tomoyuki65.com/wp-content/uploads/2017/08/0f75d36e9c10b8974484ba5147b185e3-300x180.jpg 300w, https://tomoyuki65.com/wp-content/uploads/2017/08/0f75d36e9c10b8974484ba5147b185e3-768x461.jpg 768w, https://tomoyuki65.com/wp-content/uploads/2017/08/0f75d36e9c10b8974484ba5147b185e3-320x192.jpg 320w" sizes="(max-width: 801px) 100vw, 801px" />
<p>まず、図の左側にある変数「str」と「str2」は同じ文字列オブジェクト「&#8221;tanaka&#8221;」のラベルです。</p>
<p>その後、変数「str」に文字列「&#8221;TANAKA&#8221;」を代入した場合、<span style="border-bottom: 2px solid #be3144;"><strong>「str」と「str2」は別々のオブジェクトのラベル</strong></span>となります。</p>
<p>&nbsp;</p>
<p>次に以下の図２をご覧下さい。</p>
<p>図２：破壊的メソッドのイメージ</p>
<img decoding="async" class="aligncenter size-full wp-image-515" style="border: 1px solid #a9a9a9;" src="https://tomoyuki65.com/wp-content/uploads/2017/08/1093f839e29e69d98e064a39ba7d31fc.jpg" alt="" width="801" height="481" srcset="https://tomoyuki65.com/wp-content/uploads/2017/08/1093f839e29e69d98e064a39ba7d31fc.jpg 801w, https://tomoyuki65.com/wp-content/uploads/2017/08/1093f839e29e69d98e064a39ba7d31fc-300x180.jpg 300w, https://tomoyuki65.com/wp-content/uploads/2017/08/1093f839e29e69d98e064a39ba7d31fc-768x461.jpg 768w, https://tomoyuki65.com/wp-content/uploads/2017/08/1093f839e29e69d98e064a39ba7d31fc-320x192.jpg 320w" sizes="(max-width: 801px) 100vw, 801px" />
<p>図１と同様に変数「str」と「str2」は同じ文字列オブジェクト「&#8221;tanaka&#8221;」のラベルです。</p>
<p>ただし、「str.upcase!」メソッド実行後は、<span style="border-bottom: 2px solid #be3144;"><strong>ラベル元のオブジェクトが「&#8221;TANAKA&#8221;」で上書き</strong></span>されます。</p>
<p>&nbsp;</p>
<p>このように、<span style="border-bottom: 2px solid #be3144;"><strong>元のオブジェクトを変えてしまうメソッドを破壊的メソッド</strong></span>と呼びます。</p>
<p>今回は「！」が付いているメソッドについて説明しましたが、<strong><span style="color: #ff0000;">「！」が付いていないメソッドにも同様の動作をするものがありますので注意</span></strong>して下さい。</p>
<p>&nbsp;</p>
<div class="supplement ">※stringクラスの「！」が付いていない破壊的メソッド例</p>
<div>insert</div>
<div>replace</div>
<div>concat</div>
<div>［］=</div>
</div>
<p>&nbsp;</p>
<p><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9453826382162914" data-ad-slot="5514976097"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<h2>%記法</h2>
<p>これまで学んだ文字列の書き方は、「&#8221;」または「&#8217;」で囲う方法でした。</p>
<p>しかし、他の便利な方法として<strong><span style="border-bottom: 2px solid #be3144;">「%記法」</span></strong>というものがあります。</p>
<p>%記法では、「&#8221;」の代わりに<span style="border-bottom: 2px solid #be3144;"><strong>「%Q{}」または「%{}」</strong></span>（Qは省略可能）、「&#8217;」の代わりに<span style="border-bottom: 2px solid #be3144;"><strong>「%q{}」</strong></span>を使うことができます。</p>
<p>&nbsp;</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># 「"」または「'」の場合
puts "みかん2個で#{100 * 2}円"
puts 'みかん2個で#{100 * 2}円'

# 「"」で囲うのと同等
puts %Q{みかん2個で#{100 * 2}円}
# Qは省略可能
puts %{みかん2個で#{100 * 2}円}

# 「'」で囲うのと同等
puts %q{みかん2個で#{100 * 2}円}</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
みかん2個で200円<br />
みかん2個で#{100 * 2}円<br />
みかん2個で200円<br />
みかん2個で200円<br />
みかん2個で#{100 * 2}円<br />
</div>
<p>&nbsp;</p>
<p>実行結果の通り、「&#8221;」や「&#8217;」で囲ったのと同様に文字列が出力されました。</p>
<p>確かに文字列が出力されましたが、何が便利なのでしょうか？</p>
<p>&nbsp;</p>
<p>それは、文字列の中で「&#8221;」や「&#8217;」を使いたい場合に、<strong><span style="border-bottom: 2px solid #be3144;">%記法であれば「\」（バックスラッシュ）を記載する必要がありません。</span></strong></p>
<p>&nbsp;</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># 「"」または「'」の場合、「\」が必要
puts "Hello\"World"
puts 'Hello\'World'

# %記法の場合
puts %{Hello"World}
puts %q{Hello'World}</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
Hello&#8221;World<br />
Hello&#8217;World<br />
Hello&#8221;World<br />
Hello&#8217;World<br />
</div>
<p>&nbsp;</p>
<p><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9453826382162914" data-ad-slot="5514976097"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<h2>書式付き文字列</h2>
<p>文字列には、<span style="border-bottom: 2px solid #be3144;"><strong>書式付きで値を埋め込む</strong></span>ことができます。</p>
<p>書き方は「&#8221;文字列&#8221;　%　値」とし、値の種類に応じて文字列の中に<strong><span style="border-bottom: 2px solid #be3144;">特殊な記号</span></strong>を使用します。</p>
<p>例えば、<span style="border-bottom: 2px solid #be3144;"><strong>値が文字列の場合は「%s」、整数の場合は「%d」、浮動小数点数の場合は「%f」を使用</strong></span>します。</p>
<p>&nbsp;</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># 文字列を埋め込む場合
p "name：%s" % "Tanaka"

# 10桁分の幅を確保して文字列を埋め込む
p "name：%10s" % "Tanaka"

# 10桁分の幅を確保して左寄せ
p "name：%-10s" % "Tanaka"

# 整数と浮動小数点数を埋め込む場合
p "num：%d, rate: %f" % [10, 0.10]

# 整数が4桁、満たない場合は0埋め
# 浮動小数点数で小数点の前が5桁、小数点以下が2桁
p "num：%04d, rate: %5.2f" % [10, 0.10]</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
&#8220;name：Tanaka&#8221;<br />
&#8220;name：    Tanaka&#8221;<br />
&#8220;name：Tanaka    &#8221;<br />
&#8220;num：10, rate: 0.100000&#8221;<br />
&#8220;num：0010, rate:  0.10&#8221;<br />
</div>
<p>&nbsp;</p>
<p>実行結果の通り、文字列の中に値を埋め込むことができます。</p>
<p>また、これらは書式を指定して出力する<strong><span style="border-bottom: 2px solid #be3144;">「printf」や「sprintf」メソッドでも使用できます。</span></strong></p>
<p>&nbsp;</p>
<p>では以下のプログラムを実行してみて下さい。</p>
<pre style="background-color: #272822;"><code class="Ruby"># printfを使用（わかりやすいよう改行を付与）
printf("name：%10s\n", "Tanaka")
printf("num：%04d, rate: %5.2f\n", 10, 0.10)

# sprintfを使用（文字列を返すメソッドのため、pメソッドも使用）
p sprintf("name：%10s\n", "Tanaka")
p sprintf("num：%04d, rate: %5.2f\n", 10, 0.10)</code></pre>
<p>&nbsp;</p>
<div class="c_box intitle green_box type_normal"><div class="box_title"><span class="span__box_title">実行結果</span></div>
name：    Tanaka<br />
num：0010, rate:  0.10<br />
&#8220;name：    Tanaka\n&#8221;<br />
&#8220;num：0010, rate:  0.10\n&#8221;<br />
</div>
<p>&nbsp;</p>
<h2>まとめ</h2>
<ul>
<li> 文字列はメソッドにより様々な処理をさせることができる（文字列操作）</li>
<li> 「upcase」メソッドは、文字列中の小文字を大文字に変換する</li>
<li> 「include?」メソッドは、文字列中に特定の文字列が存在するかを判定し、真偽値を返す</li>
<li> 「length」メソッドは、文字列のバイト数を返す</li>
<li> 「?」付きのメソッドが真偽値を返すメソッドで、条件が真（成り立つ）の時は「true」、偽の時は「false」を返す</li>
<li> 元のオブジェクトを変えてしまうメソッドを破壊的メソッドと呼ぶ</li>
<li> 「!」付きのメソッドが破壊的メソッドだが、「!」が付いていないものも存在する</li>
<li> %記法の書き方は、「&#8221;」の代わりに「%Q{}」または「%{}」（Qは省略可能）、「&#8217;」の代わりに「%q{}」を使う</li>
<li> 文字列には書式付きで値を埋め込むことができ、書き方は「&#8221;文字列&#8221;　%　値」である</li>
<li> 書式付きで値を埋め込む場合、値が文字列の場合は「%s」、整数の場合は「%d」、浮動小数点数の場合は「%f」を使用する</li>
</ul>
<p>&nbsp;</p>
<ul>
<li> <strong>関連記事</strong></li>
</ul>
<div class="related_article cf labelnone"><a href="https://tomoyuki65.com/ruby-learning-method-summary"><figure class="eyecatch thum"><img decoding="async" width="486" height="290" src="https://tomoyuki65.com/wp-content/uploads/2017/10/ruby190531-8-min-486x290.png" class="attachment-home-thum size-home-thum wp-post-image" alt="" /></figure><div class="meta inbox"><p class="ttl">【無料あり】Ruby入門サイトおすすめ３選！初心者向けの学習方法を解説</p><span class="date gf">2017年10月24日</span></div></a></div>
<p>&nbsp;</p>The post <a href="https://tomoyuki65.com/introduction-to-ruby-5">【Ruby入門】文字列のメソッドを使う！破壊的メソッドや%記法【#5】</a> first appeared on <a href="https://tomoyuki65.com">エンジニアライブログ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://tomoyuki65.com/introduction-to-ruby-5/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
