1. Stringクラスとは
● Stringクラスとは
● 作成、初期化、代入
普通のブロジェクトを新しく作成するにはnew
演算子から始まる式を書きますが、Stringオブジェクトは特別に簡単にこのように書きます。
String str;
これで、文字列を表すStringオブジェクトが得られ、変数str
がそのオブジェクトを表すようになります。
次はオブジェクトの作成と、変数の初期値を同時にする
String str = "こんにちは";
これで、”こんにちは”という文字列をを表すStringオブジェクトが得られ、変数str
がそのオブジェクトを表すようになります。
注意:
String str = "こんにちは、 田中です。"
\"
は"
、\\
は\n
、改行
例
String str = "こんにちは、\"田中です\"、\\バックスラッシュを追加しました。\n改行しました。"; /*出力結果: こんにちは、"田中です"、\バックスラッシュを追加しました。 改行しました。 */
さて、以下のように、本質のブロジェクトの作成仕方を使用しても構いません。しかし、長いので、上の作成法で楽!
String str = new String("こんにちは");
● 文字の表示
文字列を表示するにはSystem.outのprintln()かprint()メソッドを使います。このメソッドの引数にStringオブジェクトを与えると、そのオブジェクトが表す文字列を表示します。
println()メソッド : 引数を表示し、自動的に末尾に改行を挿入します。例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "こんにちは"; System.out.println(str);//str変数に対応する文字列を表示して、改行します。 System.out.println("田中です。");//"田中です。"という文字列を直接表示、改行します。 } }
実行結果:
print()メソッド : 引数を表示します。末尾に改行は付きません。こんにちは。 田中です。
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "こんにちは"; System.out.print(str);//str変数に対応する文字列を表示します。 System.out.print("田中です。");//"田中です。"という文字列を直接表示します。 } }
実行結果:
こんにちは。田中です。
2. 文字列を取り扱うメソッド
● lengthで文字列の長さを取得する
String型変数.length()
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str1 = "こんにちは。青山です。1234"; String str2 = "こんにちは。青山です。1234"; String str3 = "こんにちは。\n青山です。1234"; int length1 = str1.length(); //str1変数に対応する文字列の長さを取得し、length1変数に初期化する int length2 = str2.length(); //str2変数に対応する文字列の長さを取得し、length2変数に初期化する int length3 = str3.length(); //str3変数に対応する文字列の長さを取得し、length3変数に初期化する System.out.println("\"こんにちは。青山です。1234\"" + " の長さ:" + length1); System.out.println("\"こんにちは。青山です。1234\"" + " の長さ:" + length2); System.out.println("\"こんにちは。\\n青山です。1234\"" + " の長さ:" + length3); } }
実行結果:
説明:
\n
は1文字としてカウントしています。● equals、compareTo()、compareToIgnoreCase()で文字列の比較
String型変数1.equals(String型変数2) String型変数1.compareTo(String型変数2) String型変数1.compareToIgnoreCase(String型変数2)
==
は数字の比較に使えますが、文字列に使うべきではありません。==
は文字列の値が一緒かどうかではなく文字列がメモリ上で格納されている場所が一緒かどうかという比較演算です。例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str1 = "こんにちは。青山です。"; String str2 = "こんばんは。青山です。"; System.out.print("equalsで比較する:"); if(str1.equals(str2)){ System.out.println("str1 = str2"); }else{ System.out.println("str1 ≠ str2"); } System.out.print("compareToで比較する:"); if(str1.compareTo(str2) > 0){ System.out.println("str1 > str2"); }else if(str1.compareTo(str2) < 0) { System.out.println("str1 < str2"); }else{ System.out.println("str1 = str2"); } } }
実行結果:
equalsで比較する:str1 ≠ str2 compareToで比較する:str1 < str2
● isEmptyで文字列が空か調べる
String型変数.isEmpty()
String型変数.isEmpty()
で文字列は空ならば、結果がtrueになり、空出なければ、結果はfalseになります。==
の演算子を利用するといいです。構文:String型変数 == null
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str1 = ""; if(str1.isEmpty()){ System.out.println("str1 は空文字列です"); }else{ System.out.println(str1 は空文字列ではないです。"); } } }
実行結果:
str1 は空文字列です
● concat、joinで連結
concatメソッド
String型変数1.concat(String型変数2)
変数1+変数2
と一緒ですjoinメソッド
String.join("区切り文字", String型変数1, String型変数2, ・・・)
変数1+ ”区切り文字” + 変数2 + ”区切り文字” + ・・・
となります。例
import java.util.*; public class Main { public static void main(String[] args){ //String型を宣言 String str1 = "僕は青山です"; String str2 = "よろしくお願いします"; //concatで文字列を結合する String sconcat = str1.concat(str2); System.out.println("sconcat : " + sconcat); //joinで文字列を結合する String sjoin = String.join("。",str1,str2,"一緒にがんばりましょう!"); System.out.println("sjoin : " + sjoin); } }
実行結果:
sconcat : 僕は青山ですよろしくお願いします sjoin : 僕は青山です。よろしくお願いします。一緒にがんばりましょう!
● trimで空白を削除
String型変数.trim()
例
import java.util.*; public class Main { public static void main(String[] args){ String str1 = " i love you "; String str2 = " i love you so much \n";//末尾に改行コードを入れてあります。 System.out.println("削除前 = \"" + str1 + "\""); System.out.println("削除後 = \"" + str1.trim() + "\""); System.out.println("削除前 = \"" + str2 + "\""); System.out.println("削除後 = \"" + str2.trim() + "\""); } }
実行結果:
削除前 = " i love you " 削除後 = "i love you" 削除前 = " i love you so much " 削除後 = "i love you so much"
● splitで分割
String型変数.split("区切り文字")
例
package helloworld; import java.util.Arrays; import java.util.List; public class HelloWorld { public static void main(String[] args) { String str = "田中、牧野、青山"; System.out.println("元の文字列: " + str); //データを配列で受け取る String[] nameArray = str.split("、"); //配列の要素を順番に出力する。この構文は次の記事「JAVAの配列」を見ましょう。 System.out.print("配列からの出力:"); for (String name : nameArray) { System.out.print(name + " "); } //データをLISTで受け取る。この構文は記事「JAVAのArrayList」を見ましょう。 ListnameList = Arrays.asList(str.split("、")); //LISTの要素を出力する。 System.out.println("\nLISTからの出力:" + nameList); } }
実行結果:
補充 : 特別な区切り文字で文割りする分割する:元の文字列: 田中、牧野、青山 配列からの出力:田中 牧野 青山 LISTからの出力:[田中, 牧野, 青山]
String[] Array = str.split("\n")
String[] Array = str.split("\t")
String[] Array = str.split(" ")
String[] Array = str.split("\\.")
● substring、charAtで範囲を切り出す
String型変数.substring(int beginIndex, int endIndex) String型変数.charAt(切り出し文字の位置)
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "i love you so much!"; System.out.println("元の文字列: " + str); //strから2番目から最後までの部分文字列を切り出す。 String strCut1 = str.substring(2); System.out.println("・2番目から最後までの部分文字列: " + strCut1); //strから2番目から10番目までの部分文字列を切り出す。 String strCut2 = str.substring(2, 10); System.out.println("・2番目から10番目までの部分文字列: " + strCut2); //strからの後ろから5文字を切り出す。 String strCut3 = str.substring(str.length() - 5, str.length());//length()メソッドは文字列の長さを示すメソッドです。 System.out.println("・後ろから3文字: " + strCut3); //strから5番目の文字を切り出す System.out.println("・5番目の文字: " + str.charAt(5)); } }
実行結果:
元の文字列: i love you so much! ・2番目から最後までの部分文字列: love you so much! ・2番目から10番目までの部分文字列: love you ・後ろから3文字: much! ・5番目の文字: e
● indexOfで位置の検索
String型変数.indexOf("指定文字列"); String型変数.indexOf("指定文字列",検索開始位置); String型変数.lastIndexOf("指定文字列");
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "i love you so much!love you!"; System.out.println("元の文字列: " + str); // 特定の文字列「love」が存在するか出力 System.out.println("\"love\"は最初に見つかった番目:" + str.indexOf("love")); System.out.println("\"love\"は3番目以降に見つかった番目:" + str.indexOf("love",3)); System.out.println("\"love\"は末尾から最初に見つかった番目:" + str.lastIndexOf("love")); } }
実行結果:
元の文字列: i love you so much!love you! "love"が最初に見つかった番目:2 "love"が3番目以降に見つかった番目:19 "love"が末尾から最初に見つかった番目:19
● containsで文字列検索
String型変数.contains("指定文字列")
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "i love you so much!love you!"; System.out.println("元の文字列: " + str); if (str.contains("love")) { System.out.println("\"love\"は見つかりました:" + str.indexOf("love") + "番目からです。"); }else{ System.out.println("\"love\"は見つかりませんでした"); } } }
実行結果:
元の文字列: i love you so much!love you! "love"は見つかりました:2番目からです。
● formatで書式付き文字列を出力
String.format("書式" , 値)
String.format("「好き」の文字列をここに「%s」入れます", "好き")
をコンソールに出力すれば、"「好き」の文字列をここに「好き」入れます"
になります。つまり、%dの書式にString.formatメソッドの2番目の引数の値を代入するのです。書式 | データ型 | 例 |
---|---|---|
%s | String(文字列) | "こんにちは" |
%c | char(文字) | 'あ','い'... |
%b | boolean(真偽値) | true,false |
%d | int-数字 | 1,2,3... |
%f | float(浮動小数点) | 3.1415 |
例
package helloworld; public class HelloWorld { public static void main(String[] args) { System.out.println(String.format("ここに「%s」入れます", "好き")); System.out.println(String.format("ここに「%d」入れます", 1)); System.out.println(String.format("ここに「%c」入れます", 'あ'));//char型の場合、""ではなく、''で文字が囲まれます。 System.out.println(String.format("ここに「%b」入れます", true)); System.out.println(String.format("ここに「%f」入れます", 3.1415)); } }
実行結果:
ここに「好き」入れます ここに「1」入れます ここに「あ」入れます ここに「true」入れます ここに「3.141500」入れます
● toUpperCase、toLowerCaseで大文字と小文字を変換
String型変数.toUpperCase() String型変数.toLowerCase()
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "i Love You"; System.out.println("元の文字列:" + str); System.out.println("大文字にした:" + str.toUpperCase()); System.out.println("小文字にした:" + str.toLowerCase()); System.out.println("最初の文字だけ大文字にした:" + str.substring(0, 1).toUpperCase() + str.substring(1)); } }
実行結果:
元の文字列:i Love You 大文字にした:I LOVE YOU 小文字にした:i love you 最初の文字だけ大文字にした:I Love You
● replace、replaceAll、replaceFirstで置換
対象の文字列.replace(置換される文字列, 置換文字列) 対象の文字列.replaceAll(置換される文字列, 置換文字列) 対象の文字列.replaceFirst(置換される文字列, 置換文字列)
例
package helloworld; public class HelloWorld { public static void main(String[] args) { String str = "i ・・・ you so much! ・・・ you!"; System.out.println("元の文字列:" + str); System.out.println("replaceで「・・・」から「love」に置換した:" + str.replace("・・・", "love")); System.out.println("replaceAllで「・・・」から「love」に置換した:" + str.replaceAll("・・・", "love")); System.out.println("replaceAllで任意の3文字の文字列から「love」に置換した:" + str.replaceAll("...", "love"));//...という正規化は任意の3文字の文字列を示す。 System.out.println("replaceFirstで「・・・」から「love」に置換した:" + str.replaceFirst("・・・", "love")); } }
実行結果:
元の文字列:i ・・・ you so much! ・・・ you! replaceで「・・・」から「love」に置換した:i love you so much! love you! replaceAllで「・・・」から「love」に置換した:i love you so much! love you! replaceAllで任意の3文字の文字列から「love」に置換した:lovelovelovelovelovelovelovelovelove replaceFirstで「・・・」から「love」に置換した:i love you so much! ・・・ you!
3. まとめ
ここまでは文字列ーStringクラスの作成、初期化、代入や文字列を取り扱う有益のメソッドを紹介しました。
Stringクラスは開発現場でよく使われていますので、うまくプログラムを取り組んでください。
4. 演習問題
JAVAの文字列の演習問題
広告