<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>String</title><revhistory><revision><revnumber>31</revnumber><date>2011-10-15 02:30:24</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>30</revnumber><date>2011-10-13 07:11:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>29</revnumber><date>2011-10-13 07:10:43</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>28</revnumber><date>2011-10-10 12:59:22</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>27</revnumber><date>2011-10-10 12:49:40</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>26</revnumber><date>2011-10-09 14:20:38</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>25</revnumber><date>2011-10-09 14:19:42</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>24</revnumber><date>2011-10-09 14:18:48</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>23</revnumber><date>2011-10-09 14:05:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>22</revnumber><date>2011-10-09 13:39:41</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>21</revnumber><date>2011-10-09 13:31:20</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>20</revnumber><date>2011-10-09 13:30:26</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>19</revnumber><date>2011-10-08 13:40:26</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>18</revnumber><date>2011-10-08 13:39:02</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>17</revnumber><date>2011-10-08 13:38:20</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>16</revnumber><date>2011-10-08 13:24:53</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>15</revnumber><date>2010-10-10 13:20:09</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>14</revnumber><date>2010-10-10 13:17:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2010-10-10 13:16:38</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2009-10-21 04:40:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2009-10-09 11:50:07</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2009-10-02 12:41:09</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2008-10-20 03:00:30</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2008-10-20 02:52:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2008-10-20 02:50:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2008-10-20 02:39:31</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2008-10-20 02:33:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2008-10-20 02:27:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2008-10-20 02:08:35</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2008-10-20 02:01:09</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2008-10-19 02:38:16</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>String</title><para>文字列を扱うにはStringクラスを用います。 </para><itemizedlist><listitem override="none"><para>文字列は基本型(プリミティブ)ではない。 </para></listitem><listitem override="none"><para>charの配列ではない。(Cとは異なる) </para></listitem><listitem override="none"><para>Stringは変更不能なオブジェクトです。 </para></listitem><listitem override="none"><para>文字列はオブジェクトであるが、普通のオブジェクトとは次の点で振る舞いが異なります。 </para><itemizedlist><listitem override="none"><para>文字列に演算が行われたときは、そのオブジェクトが修正されるのではなく、新しくオブジェクトが作られます。 </para></listitem></itemizedlist></listitem></itemizedlist><para>文字が並んだものを文字列という。 </para><itemizedlist><listitem override="none"><para>プログラム中で文字列は <emphasis role="strong">&quot;</emphasis> ではさんで &quot;Hello World&quot; のように記述する。 </para></listitem><listitem override="none"><para>この文字列の値は <emphasis role="strong">Hello World</emphasis> であって、<emphasis role="strong">&quot;</emphasis> は含まれない。 </para></listitem><listitem override="none"><para><emphasis role="strong">&quot;&quot;</emphasis> は長さ０の文字列である。空文字列という。 </para></listitem></itemizedlist><para>以下に文字列の使い方の一部を示します。 他にも多くのメソッド（関数）があります。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>連結</title><para>文字列の連結は演算記号 <emphasis role="strong">+</emphasis> を使って行うことが出来る。 </para><para>a,b,cをStringクラスの変数とし </para><itemizedlist><listitem override="none"><screen><![CDATA[ a = "Hello";
 b = "World";
 c = a + b;]]></screen></listitem></itemizedlist><para>を行うと、c の値は <emphasis role="strong">Hello</emphasis><emphasis role="strong">World</emphasis> になる。 </para><para>基本型(プリミティブ)を文字列に連結すると、値に対応する文字列に変換してから連結される。 </para><para>kがint型、xがdouble型、pがboolean型、sがStringクラスの変数のとき </para><itemizedlist><listitem override="none"><screen><![CDATA[ k = 103;
 x = 5.789;
 p = true;
 s = "kotae" + k + x + p;]]></screen></listitem></itemizedlist><para>を行うと、s は <emphasis role="strong">kotae1035.789true</emphasis> になる。 </para><para>この機能は結果を表示するのにしばしば利用されます。 System.out.println には１つの引数しか書けないので、このような使い方をします。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ System.out.println("k=" + k + ", x=" + x + ", p=" + p);]]></screen></listitem></itemizedlist><para>数値を文字列に変換するには、空文字列と連結すればよい。 xがdouble、sがStringのときの例を示す。 </para><itemizedlist><listitem override="none"><screen><![CDATA[x = 3.14;
s = "" + x;]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>文字列の比較</title><para>２つの文字列が等しいかどうかを調べるには equals メソッドを使います。 </para><para>２つのString型変数 a, b が、文字列として等しいかを判定する論理式は次のように書きます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[a.equals(b)]]></screen></listitem></itemizedlist><para>変数 a の値が文字列 &quot;Hello&quot; と等しいか比較する場合はこのように書きます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[a.equals("Hello")]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例</title><para>文字列の連結と比較を行うプログラム </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[MojiHikaku]]></methodname><![CDATA[ {]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[ (]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[) {]]>
<![CDATA[                ]]><methodname><![CDATA[String]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[, ]]><methodname><![CDATA[c]]></methodname><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><phrase><![CDATA["Hello"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[ = ]]><methodname><![CDATA[a]]></methodname><![CDATA[ + ]]><phrase><![CDATA["World"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><phrase><![CDATA["HelloWorld"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><methodname><![CDATA[a]]></methodname><![CDATA[ );]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><methodname><![CDATA[b]]></methodname><![CDATA[ );]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><methodname><![CDATA[c]]></methodname><![CDATA[ );]]>
<![CDATA[                ]]><token><![CDATA[if]]></token><![CDATA[( ]]><methodname><![CDATA[b]]></methodname><![CDATA[ == ]]><methodname><![CDATA[c]]></methodname><![CDATA[ )]]>
<![CDATA[                        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><phrase><![CDATA["equal"]]></phrase><![CDATA[ );]]>
<![CDATA[                ]]><token><![CDATA[else]]></token>
<![CDATA[                        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><phrase><![CDATA["not equal"]]></phrase><![CDATA[ );]]>
<![CDATA[                ]]><token><![CDATA[if]]></token><![CDATA[( ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[equals]]></methodname><![CDATA[(]]><methodname><![CDATA[c]]></methodname><![CDATA[) )]]>
<![CDATA[                        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><phrase><![CDATA["equal"]]></phrase><![CDATA[ );]]>
<![CDATA[                ]]><token><![CDATA[else]]></token>
<![CDATA[                        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[( ]]><phrase><![CDATA["not equal"]]></phrase><![CDATA[ );]]>
<![CDATA[        }]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>Stringはプリミティブ(基本型)ではないので、値は変数とは別の場所にとられます。</para><para> 変数a,b,cへの代入では、対応する箱には文字列の値があるアドレスが代入されます。</para><para> ３つの代入文が実行された後の状態はこのようになります。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/String?action=AttachFile&amp;do=get&amp;target=string2.png"/></imageobject><textobject><phrase>string2.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>10行目のif文では条件として b == c の論理式を用いています。 プリミティブの比較はこれで行いますが…… </para><itemizedlist><listitem override="none"><para>== は変数の箱に入っている値を比較します。 </para></listitem><listitem override="none"><para>変数bとcの箱には文字列のあるアドレスが入っています。 </para></listitem><listitem override="none"><para>上の図の状態であると考えると、bとcの箱の中の値は異なるので not equal と表示されます。 </para></listitem></itemizedlist><para>14行目のif文では equalsメソッドを使って判定しているので、 文字列の値が比較され equal となります。 </para><para>実行結果 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/String?action=AttachFile&amp;do=get&amp;target=string1.png"/></imageobject><textobject><phrase>string1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>文字列の長さ</title><para>文字列の長さを求めるには length メソッドを使います。 </para><para>書き方 </para><itemizedlist><listitem override="none"><screen><![CDATA[ 文字列.length()]]></screen></listitem></itemizedlist><para><emphasis role="strong">例1</emphasis> </para><itemizedlist><listitem override="none"><screen><![CDATA[s = "Hello";
System.out.println( s.length() );]]></screen></listitem></itemizedlist><para>変数sに代入された文字列&quot;Hello&quot;の長さを求めそれを表示します。 5と表示されます。 </para><para><emphasis role="strong">例2</emphasis> </para><itemizedlist><listitem override="none"><screen><![CDATA[i = "HelloWorld".length();]]></screen></listitem></itemizedlist><para>文字列に対して直接lengthを行うこともできます。 iには10が代入されます。 </para><para><emphasis role="strong">例3</emphasis> </para><itemizedlist><listitem override="none"><screen><![CDATA[s = "日本語の文字列";
i = s.length();]]></screen></listitem></itemizedlist><para>漢字などでも文字数を正しく求められます。 iの値は7になります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>部分文字列</title><para>文字列からその一部分を取り出すには substring メソッドを使います。 </para><para>substringメソッドも文字列の後ろに .substring(0,3) のような形でつけて使います。 引数を２つとり、１番目は取り出す最初の位置、２番目は取り出す最後の文字の次の位置です。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ s = "ABCDEFG";
 System.out.println( s.substring(2,5) );]]></screen></listitem></itemizedlist><para>を行うと <emphasis role="strong">CDE</emphasis> と表示される。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>部分の文字</title><para>文字列を構成する１文字を取り出すには indexOf メソッドを使います。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ String s;
 char c;
 s = "ABCDEFG";
 c = s.indexOf(3);]]></screen></listitem></itemizedlist><para>とすると、cには文字Dが入ります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>数値への変換</title><para>文字列 s をintに変換しint型の変数 i に代入するにはこのように書きます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[s = "1230";
i = Integer.parseInt( s );]]></screen></listitem></itemizedlist><para>文字列 s をdoubleに変換しdouble型の変数 d に代入するにはこのように書きます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[s = "2.17";
d = Double.parseDouble( s );]]></screen></listitem></itemizedlist></section></section></article>