1

この記事の目次



1.  Stringクラスとは


 ●  Stringクラスとは

  • Stringとは、文字列を扱うためのクラスです。
  • 文字列はオブジェクトによって表され、それを操作するためのメソッドが提供されています。
  • Stringクラスと言いますが、少々特別扱いされています。int型の他に文字列を表すStringという基本型があると思っても、それほど困りません(もちろん本質は基本データ型ではないです)
  •  ●  作成、初期化、代入

    普通のブロジェクトを新しく作成するにはnew演算子から始まる式を書きますが、Stringオブジェクトは特別に簡単にこのように書きます。

    String str;

    これで、文字列を表すStringオブジェクトが得られ、変数strがそのオブジェクトを表すようになります。

    次はオブジェクトの作成と、変数の初期値を同時にする

    String str = "こんにちは";

    これで、”こんにちは”という文字列をを表すStringオブジェクトが得られ、変数strがそのオブジェクトを表すようになります。

    注意:

  • 文字列の中に空白を入れても構いません。例:String str = "こんにちは、 田中です。"
  • ""は長さ0の空文字列を表します
  • 文字列の中にダブルクオートやバックスラッシュを含めたいときに、直前にバックスラッシュをつけます。\""\\\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);
                      
        }
      
    }
    

    実行結果:

    説明:

  • lengthメソッドは文字列の長さを取得するメソッドです。
  • lengthメソッドは文字数を数えるのに全角、半角どちらの文字数も同じです。
  • lengthメソッドで改行コード\nは1文字としてカウントしています。
  •  ●  equals、compareTo()、compareToIgnoreCase()で文字列の比較

    String型変数1.equals(String型変数2)
    String型変数1.compareTo(String型変数2)
    String型変数1.compareToIgnoreCase(String型変数2)
  • equalsメソッドは二つの文字列は等しいか等しくないかを判定するメソッドです。変数1が変数2と等しければ、結果はtrueになります。等しくなければ、結果flaseになります。
  • compareToメソッドは値や文字列を大小を比較するメソッドです。変数1が大きい場合は正の値に返却します、小さい場合は負の値に返却します、同じ場合は0になります。compareToメソッドでは文字列の大文字と小文字を区別します。
  • compareToIgnoreCase()はcompareToメソッドと使い方はほぼ同じですが、文字列の大文字と小文字を区別しません。
  • 注意:==は数字の比較に使えますが、文字列に使うべきではありません。==は文字列の値が一緒かどうかではなく文字列がメモリ上で格納されている場所が一緒かどうかという比較演算です。
  • 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になります。
  • nullと空文字列は別々です。String型は参照型のため値を直接持たず、値のある場所を参照するようになっています。 この参照先が無い状態をnullといいます。空の文字列の場合は参照先に空の文字列がある状態なので、nullにはなりません。nullかを確認したい場合、==の演算子を利用するといいです。構文: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)
  • concatメソッドは文字列同士を簡単に結合するメソッドです。
  • 結果は変数1+変数2と一緒です
  • joinメソッド

    String.join("区切り文字", String型変数1, String型変数2, ・・・)
  • concatメソッドは二つ以上のString型変数か文字列の結合するメソッドです;結果は変数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()
  • 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("区切り文字")
  • splitメソッドは文字列の中にある特定の文字列で分割し、データを配列かLISTで受け取るメソッドです。配列とLISTの取り扱いは次の記事「JAVAの配列」と「JAVAのArrayList」で理解しましょう。
  • 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」を見ましょう。
            List nameList = 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(切り出し文字の位置)
  • substringメソッドは文字列の中から、開始位置beginIndex文字目から終了位置endIndex文字目までも文字列を切り取るメソッドです。
  • 第二引数のendIndexは省略する場合は部分文字列はbeginIndexから最後の文字までが範囲となります。文字は0番目から数えます。例えば:"name"の1番目は "a"となります。
  • lengthメソッドを利用することで、文字列の後ろから切り出すことができる。
  • charAtメソッドは元の文字列から定まった位置の1文字を切り出すメソッドです。
  • 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("指定文字列");
  • indexOfメソッドは1番目の構文、元の文字列の中から特定の文字列を見つけた場合、どの位置で見つかったかを返してくれるメソッドです。2番目の構文で、指定した検索開始位置以降からどの位置で見つかったかを確認する。3番目のlastIndexOfメソッドは末尾から確認する
  • 特定の文字列が存在する場合、先頭を0として数えた番号を返す、存在しない場合、-1を返す。
  • 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("指定文字列")
  • containsメソッドは元の文字列に特定の文字列が含まれているか確認するメソッドです。
  • 指定の文字列が存在している場合は「true」の結果を返し、存在ない場合は「false」の結果を返す。
  • containsで文字列検索の場合はboolean型に返却するが、indexOfで文字列検索するとint型が返却するので、注意してください。
  • 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メソッドは引数に指定した書式を元にルールに沿った文字列を返すというメソッド
  • 例:String.format("「好き」の文字列をここに「%s」入れます", "好き")をコンソールに出力すれば、"「好き」の文字列をここに「好き」入れます"になります。つまり、%dの書式にString.formatメソッドの2番目の引数の値を代入するのです。
  • 以下はString型データ以外の型の書式です。
  • 書式 データ型
    %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()
  • toUpperCaseメソッドは小文字を大文字に変換するメソッドで、toLowerCaseメソッドは大文字を小文字に変換するメソッドです。
  • substring(0, 1)を利用することで、文字列の最初の文字だけ大文字にすることができます。下の例を見ましょう。
  • 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(置換される文字列, 置換文字列)
  • 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.  演習問題


    広告