第7章 Stringクラスを使った文字列処理
この章ではStringクラスを使った文字列処理について説明します。
homepage
# **Stringクラスを使った文字列処理** *** Stringとは、文字列を扱うためのクラスです。内部に文字列を保持し、それを操作するためのメソッドを提供します。データを保持しているだけの基本データ型(boolean,byte,char,short,int,long,float,double)とは違うことに気をつけてください。 「java.lang」パッケージの中にあるため、importすることなく使うことができます。 <pre><code>String str; str = "文字列"; </code></pre> **例1:** <pre><code>String str; str = ""; //空文字(何もない文字列) </code></pre> **例2:** <pre><code>String str; str = "hoge"; //変数strには「hoge」という文字列が入りました。 </code></pre> <br> ## **1.文字列の処理** <pre><code>String str; str = "abc"; str = str + "def";//あるいは str += "def" </code></pre> <br> #### **例** [JSample7_1.java] <pre><code>package JSample; public class JSample7_1 { public static void main(String[] args) { String str = "おはようございます。"; str += "田中さん。"; System.out.println(str); } } </code></pre> #### **実行結果** おはようございます。田中さん。 <br><br> ## **2.文字列が等しいかどうか調べる** 文字列と文字列を比較する場合、「==」演算子を使うと同じ文字列でも等しいと判定されたり等しくないと判定されたりします。 どういった時にどう判定されるのかはJavaの実装にも依存してしまいますのでオブジェクトの比較ではなく同じ文字列が格納さ えているかどうか調べる時には「==」演算子は使わないで下さい。 **equalsメソッド** オブジェクトが同一なのかを調べるのではなく、オブジェクトに格納されている文字列が単に同じかどうか調べるにはString クラスで用意されているequalsメソッドを使います。実際には次のように記述します。 <br> #### **例** [JSample7_2.java] <pre><code>package JSample; public class JSample7_2 { public static void main(String[] args) { String str1 = new String("abc"); String str2 = new String("abc"); String str3 = "ab"; System.out.println("str1 = " + str1); System.out.println("str2 = " + str2); if (str1 == str2) { System.out.println("等しい"); } else { System.out.println("等しくない"); } str3 = str3 + "c"; System.out.println("str1 = " + str1); System.out.println("str3 = " + str3); if (str1 == str3) { System.out.println("等しい"); } else { System.out.println("等しくない"); } System.out.println("equalsメソッドで比較"); if (str1.equals(str3)) { System.out.println("等しい"); } else { System.out.println("等しくない"); } } } </code></pre> #### **実行結果** str1 = abc<br> str2 = abc<br> 等しくない<br> str1 = abc<br> str3 = abc<br> 等しくない<br> equalsメソッドで比較<br> 等しい <br><br> ## **3.Stringクラスのメソッド** ### **3-1.指定の位置の文字を取得** ``` String型変数.charAt(インデックス) ``` #### **例** [JSample7_3.java] <pre><code>package JSample; public class JSample7_3 { public static void main(String[] args) { String str = "日本語"; char c1 = str.charAt(0); char c2 = str.charAt(1); char c3 = str.charAt(2); System.out.println(c1); System.out.println(c2); System.out.println(c3); } } </code></pre> #### **実行結果** 日<br> 本<br> 語 <br> ### 3-2.文字列の長さを取得 ``` String型変数.length() ``` <br> #### **例** [JSample7_4.java] <pre><code>package JSample; public class JSample7_4 { public static void main(String[] args) { String str = "日本語"; System.out.println("文字列:"+str); System.out.println("文字列の長さは" + str.length()); } } </code></pre> #### **実行結果** 文字列:日本語<br> 文字列の長さは3 <br> ### 3-3.文字列の一部を取得 元の文字列から一部分を取り出して新しい文字列を作成します。 ``` String型変数.substring(int beginIndex, int endIndex) ``` + beginIndex文字目から、endIndex文字目の前までを抜き出す。 <br> #### **例** [JSample7_5.java] <pre><code>package JSample; public class JSample7_5 { public static void main(String[] args) { String str1 = new String("Hello World!"); String new_str1 = str1.substring(2, 5); System.out.println(str1 + "のsubstring(2,5)は" + new_str1 + "です"); String str2 = new String("こんにちは"); String new_str2 = str2.substring(2, 4); System.out.println(str2 + "のsubstring(2,4)は" + new_str2 + "です"); } } </code></pre> #### **実行結果** Hello World!のsubstring(2,5)はlloです<br> こんにちはのsubstring(2,4)はにちです <br> ### **3-4.大文字と小文字の変換** ``` String型変数.toUpperCase() String型変数.toLowerCase() ``` #### **例** [JSample7_6.java] <pre><code>package JSample; public class JSample7_6 { public static void main(String[] args) { String str1 = new String("Thank You"); String upper_str1 = str1.toUpperCase(); String lower_str1 = str1.toLowerCase(); System.out.println("元の文字列 : " + str1); System.out.println("大文字へ変換 : " + upper_str1); System.out.println("小文字へ変換 : " + lower_str1); String str2 = new String("8AMに集合します"); String upper_str2 = str2.toUpperCase(); String lower_str2 = str2.toLowerCase(); System.out.println("元の文字列 : " + str2); System.out.println("大文字へ変換 : " + upper_str2); System.out.println("小文字へ変換 : " + lower_str2); } } </code></pre> #### **実行結果** 元の文字列 : Thank You<br> 大文字へ変換 : THANK YOU<br> 小文字へ変換 : thank you<br> 元の文字列 : 8AMに集合します<br> 大文字へ変換 : 8AMに集合します<br> 小文字へ変換 : 8amに集合します <br> ### **3-5.空白を削除する** 先頭又は最後の空白を取り除く ``` String型変数.trim() ``` <br> #### **例** [JSample7_7.java] <pre><code>package JSample; public class JSample7_7 { public static void main(String[] args) { String str1 = new String(" Japan "); System.out.println("元の文字列「" + str1 + "」"); System.out.println("文字数は" + str1.length() + "です"); String new_str1 = str1.trim(); System.out.println("空白を取り除いた文字列「" + new_str1 + "」"); System.out.println("文字数は" + new_str1.length() + "です"); } } </code></pre> #### **実行結果** 元の文字列「 Japan 」<br> 文字数は7です<br> 空白を取り除いた文字列「Japan」<br> 文字数は5です <br> ### **3-6.文字列を分割する** 任意の文字で、指定文字列を分割して配列に格納します。 ``` 配列 = String型変数.split(分割文字列) ``` <pre><code>String str = "東京,大阪,京都,北海道"; String[] city = str.split(","); </code></pre> <br> #### **例** [JSample7_8.java] <pre><code>package JSample; public class JSample7_8 { public static void main(String[] args) { String str = "東京,大阪,京都,北海道"; String[]city = str.split(","); for (int i = 0; i<city.length; i++) { System.out.println(i + "番目の要素 = :" + city[i]); } } } </code></pre> #### **実行結果** 0番目の要素 = :東京<br> 1番目の要素 = :大阪<br> 2番目の要素 = :京都<br> 3番目の要素 = :北海道 <br> ### **3-7.文字列を置換する** **(1)最初に該当した文字列を置換す** ``` String型変数.replaceFirst(置換される文字列, 置換文字列) ``` ``` String str = "沖縄出身の私は沖縄の雰囲気が好きです。"; str = str.replaceFirst("沖縄", "東京"); ``` <br> #### **例** [JSample7_9.java] <pre><code>package JSample; public class JSample7_9 { public static void main(String[] args) { String str = "沖縄出身の私は沖縄の雰囲気が好きです。"; System.out.println("変換前:"); System.out.println(str); str = str.replaceFirst("沖縄", "東京"); System.out.println("変換後:"); System.out.println(str); } } </code></pre> #### **実行結果** 変換前:<br> 沖縄出身の私は沖縄の雰囲気が好きです。<br> 変換後:<br> 東京出身の私は沖縄の雰囲気が好きです。 <br> **(2)該当する全ての文字列を置換する** ``` String型変数.replaceAll("置換される文字列", 置換文字列) ``` ``` String str = "沖縄出身の私は沖縄の雰囲気が好きです。"; str = str.replaceAll("沖縄", "東京"); ``` <br> #### **例** [JSample7_10.java] <pre><code>package JSample; public class JSample7_10 { public static void main(String[] args) { String str = "沖縄出身の私は沖縄の雰囲気が好きです。"; System.out.println("変換前:"); System.out.println(str); str = str.replaceAll("沖縄", "東京"); System.out.println("変換後:"); System.out.println(str); } } </code></pre> #### **実行結果** 変換前:<br> 沖縄出身の私は沖縄の雰囲気が好きです。<br> 変換後:<br> 東京出身の私は東京の雰囲気が好きです。 <br> ### **3-8.文字列の大小を比較する** ``` String型変数1.compareTo(String型変数2) String型変数1.compareToIgnoreCase(String型変数2) ``` + compareToメソッドは値や文字列を比較するために使います。 equalsメソッドの等しいかどうかの比較とは違い、compareToメソッドでは比較した値のどちらが大きいか、または同じかを比較することができます。 + 文字列を比較する場合はcompareToIgnoreCaseメソッドを使って、文字列の大文字と小文字を区別せずに比較する事ができます。 + 戻り値<br> メソッドの呼び出し元の値(String型変数1)が、引数の値(String型変数2)より小さい場合は”負の値” メソッドの呼び出し元の値(String型変数1)が、引数の値(String型変数2)より大きい場合は”正の値” メソッドの呼び出し元の値(String型変数1)が、引数の値(String型変数2)と同じ場合は”0” <br> #### **例** [JSample7_11.java] <pre><code>package JSample; public class JSample7_11 { public static void main(String[] args) { String str = "MNO"; System.out.println(str.compareTo("ABC")); // 結果:12 System.out.println(str.compareTo("MNO")); // 結果:0 System.out.println(str.compareTo("XYZ")); // 結果:-11 System.out.println(str.compareToIgnoreCase("mno")); // 結果:0 } } </code></pre> #### **実行結果** 12<br> 0<br> -11<br> 0 <br><br> ## **4.toStringメソッドとは** toStringメソッドは、引数にString型の文字列に変換したい変数を指定します。戻り値として、String型の文字列を返します。toString()メソッドとは、 java.lang.Objectクラスで定義されている文字列表現を返すメソッドです。全てのクラスはこのjava.lang.Objectクラスを継承しているため、必然的に どのクラスでもtoString()メソッドが定義されていることになります。 <br> #### **例** [JSample7_12.java] <pre><code>package JSample; public class JSample7_12 { public static void main(String[] args) { int num1 = 111; int num2 = 222; System.out.println(num1 + num2); String str1 = Integer.toString(num1); String str2 = Integer.toString(num2); System.out.println(str1 + str2); } } </code></pre> #### **実行結果** 333<br> 111222 + このプログラムでは、+演算子で数値を足した結果と、文字列を結合した結果をそれぞれ表示しています。Integerはint型のラッパークラスで、toString メソッドを呼び出すために使用しています。 <br><br> *** > **練習** >> **問題1**[JEx7_1.java] String型で定義された文章中のカンマの取り除いた文章を表示するプログラムを作成せよ 例) abc,123,あいう → abc123あいう <br> >> **問題2**[JEx7_2.java] 文字列の中から1文字を検索するプログラムを作成せよ。 ヒットすればその文字のインデックスを、ヒットしなければ-1を出力すること。 検索文字が複数ある場合は、最も小さいインデックスを出力すること。 例) abcabcからcを検索すると2と出力される。
content
戻る