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メソッド