Javaでは、文字列は基本データ型ではなくStringクラスのインスタンスとなります。この章では文字列を作成する方法や、文字列の操作を行う方法について解説します。
HOMEPAGEStringクラスとは、文字列を扱うために使用されているクラスです。文字列は、他の値(※1)とは違いオブジェクトと呼ばれます。オブジェクトの特徴は、データだけでなく文字列を操作するためのメソッド(機能)が含まれています。(※2)
Stringクラスでは、具体的な値(文字列)を " " (ダブルクォーテーション)で囲むことで、new演算子を使わなくてもオブジェクトを作ることができます。
(※1) 基本データ型(boolean,byte,char,short,int,long,float,double)
(※2)クラスやメソッドについては第9章で詳しく扱います。
String str; str = "文字列";
String str; str = "";
String str; str = "abc";
String str; str = "abc"; str = str + "def";(※1)(※1) 3行目は、str += "def" と書いても同じ意味になる。
package JSample; public class JSample13_1{ public static void main(String[] args){ String str = "おはようございます。"; str +="田中さん。"; System.out.println(str); } }実行結果
文字列が持つインスタンスメソッドは、Stringクラスで定義されています。
Stringクラスにはたくさんのメソッドがありますが、基本的なインスタンスメソッドには次のようなものがあります。
equalsメソッドは、「文字列が別の文字列strと等しい時trueを返す」メソッドです。
実際には次の25~29行目のように記述します。
例[JSample13_2.java]
package JSample; public class JSample13_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("等しくない"); } } }実行結果
charAtメソッドは「先頭から(インデックス)番目の文字を返す」メソッドです。
String型変数.charAt(インデックス)
package JSample; public class JSample13_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); } }実行結果
lengthメソッドは「文字列の長さ(文字数)を返す」メソッドです。
String型変数.length()
package JSample; public class JSample13_4{ public static void main(String[] args){ String str = "日本語"; System.out.println("文字列:"+str); System.out.println("文字列の長さは" + str.length()); } }実行結果
例[JSample13_5.java]
package JSample; public class JSample13_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 + "です"); } }実行結果
toUpperCaseメソッドは「英字を大文字にした文字列を返す」メソッドで、
toLowerCaseメソッドは「英字を小文字にした文字列を返す」メソッドです。
String型変数.toUpperCase() String型変数.toLowerCase()
package JSample; public class JSample13_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); } }実行結果
trimメソッドは「先頭と末尾の空白を削除した文字列を返す」メソッドです。
String型変数.trim()
package JSample; public class JSample13_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() + "です"); } }実行結果
splitメソッドは、「指定した文字で、指定文字列を分割し、分断した結果を文字列として返す」メソッドです。
配列 = String型変数.split(分割文字列) String str = "東京,大阪,京都,名古屋"; String[] city = str.split(",");この例では「東京,大阪,京都,名古屋」という文字列が指定した文字列(str)にあたり、
package JSample; public class JSample13_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]); } } }実行結果
最初に該当した文字列を置換する
replaceFirstメソッドは「文字列の中から、最初に該当した部分文字列を別の文字列に置換する」メソッドです
String型変数.replaceFirst(置換される文字列, 置換文字列)下の例では8行目がメソッドの仕様部分にあたります。
package JSample; public class JSample13_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); } }実行結果
String型変数.replaceAll("置換される文字列", 置換文字列)下の例では8行目がメソッドの仕様部分にあたります。
package JSample; public class JSample13_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); } }実行結果
compareToメソッドは「辞書順にみて、引数の文字列sより前なら負の数、同じなら0、後なら正の数を返す」メソッドです。
String型変数1.compareTo(String型引数s) String型変数1.compareToIgnoreCase(String型引き数s)
package JSample; public class JSample13_11 { public static void main(String[] args) { String str = "DEF"; System.out.println(str.compareTo("ABC")); // 結果:12 System.out.println(str.compareTo("DEF")); // 結果:0 System.out.println(str.compareTo("XYZ")); // 結果:-11 System.out.println(str.compareToIgnoreCase("def")); // 結果:0 } }実行結果
toStringメソッドは、引数にString型の文字列に変換したい変数を指定します。戻り値として、String型の文字列を返します。
toString()メソッドとは、
java.lang.Objectクラスで定義されている文字列表現を返すメソッドです。全てのクラスはこのjava.lang.Objectクラスを継承しているため、必然的に
どのクラスでもtoString()メソッドが定義されていることになります。
例[JSample13_12.java]
package JSample; public class JSample13_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); } }実行結果
問題[JEx13_1.java]
String型で定義された文章中を以下の3つのメソッドをそれぞれ使い、カンマを取り除いた文章を表示するプログラムを作成せよ
String sentence = "abc,123,あいう"; charAtメソッド replaceAllメソッド splitメソッド