カンマで区切った数字を配列に格納

C:\DATA\Java2\01Dos>java String2Table
1
2
3
4
5
 -- Press any key to exit (Input "c" to continue) --

String で定義したカンマで区切った数字を int 型配列に格納します。
また StringTokenizer の使い方も説明します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして String2Table.java の名前で保存して下さい。
    //★ 文字列の切り出しと配列の割り当て    前田 稔
    class String2Table
    {   public static void main(String[] args)
        {
            String  str= " 5, 1, 2, 3, 4, 5,";
            int     t[];
            int     i,n,p,q;
    
            // 配列の大きさを取得
            for(p=0; str.charAt(p)<'0' || str.charAt(p)>'9'; p++);
            for(q=p; str.charAt(q)>='0' && str.charAt(q)<='9'; q++);
            n= Integer.parseInt(str.substring(p,q));
            // n 個の配列を確保
            t= new int[n];
            // 配列に値を格納
            for(i=0; i<n; i++)
            {
                for(p=q; str.charAt(p)<'0' || str.charAt(p)>'9'; p++);
                for(q=p; str.charAt(q)>='0' && str.charAt(q)<='9'; q++);
                t[i]= Integer.parseInt(str.substring(p,q));
                System.out.println(t[i]);
            }
        }
    }
    
  2. java のソースファイルをコンパイルして class オブジェクトを実行して下さい。
    ページ先頭の画面が表示されたら完成です。

プログラムの説明

  1. String で定義されたカンマで区切られた数字の列を、int 型配列を割り当てて格納します。
    C言語の atoi() と違い、文字列の中に数字以外が格納されているとエラーになります。
    以下はエラーが発生する文字列の例ですが、特に空白に注意しなければなりません。
        n= Integer.parseInt(" 5");
        n= Integer.parseInt("5 ");
        n= Integer.parseInt("5,");
        
  2. 数字列が規則正しく「一個の空白」や「カンマ」で区切られているときは、文字列の分割がお勧めです。
    例えば、次の例では一個の空白で区切られています。
    "1 2 33 444 -55 666 -77 8 9"
    次の例ではカンマで区切られています。
    "1,2,33,444,-55,666,-77,8,9"
    文字列の分割は 文字列の分割 を参照して下さい。
  3. int 型に返還するには文字列の中から、空白やカンマを取り除いた数字の部分だけを切り出さなければなりません。
    部分列は substring() で取り出すのですが、Windows や STL と違い第1引数で開始位置を、第2引数で終了位置を指定します。
    例えば、次の例では文字 "c" が格納されます。
    String c = "abcd".substring(2,3);
  4. 配列に格納する文字列の定義です。
    先頭の 5, は要素の数(配列の大きさ)で、後の5個が格納する値です。
    String str= " 5, 1, 2, 3, 4, 5,";
    10個の要素を定義する場合は、例えば次のようになります。
    String str= " 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,";
  5. 配列の大きさを取得して、配列をインスタンス化します。
    for(p=0; str.charAt(p)<'0' || str.charAt(p)>'9'; p++); で p を数字の左端に設定します。
    for(q=p; str.charAt(q)>='0' && str.charAt(q)<='9'; q++); で q を数字の右端に設定します。
    n= Integer.parseInt(str.substring(p,q)) で大きさを取得します。
    t= new int[n] で配列を確保します。
        // 配列の大きさを取得
        for(p=0; str.charAt(p)<'0' || str.charAt(p)>'9'; p++);
        for(q=p; str.charAt(q)>='0' && str.charAt(q)<='9'; q++);
        n= Integer.parseInt(str.substring(p,q));
        // n 個の配列を確保
        t= new int[n];
        
  6. データを取り出して、配列に格納します。
    p が数字の左端を、q が数字の右端をポイントします。
        // 配列に値を格納
        for(i=0; i<n; i++)
        {   for(p=q; str.charAt(p)<'0' || str.charAt(p)>'9'; p++);
            for(q=p; str.charAt(q)>='0' && str.charAt(q)<='9'; q++);
            t[i]= Integer.parseInt(str.substring(p,q));
            System.out.println(t[i]);
        }
        

StringTokenizer を使う

  1. Java にはトークンを切り出す専用の Object Class が用意されています。
    これを使って String 文字列から int 型の数値を切り出して表示してみましょう。
  2. java.util.StringTokenizer; を import して下さい。
    new StringTokenizer(str, " ,;\t\r\n()", false); で String 文字列とセパレータを指定します。
    セパレータは、空白、カンマ、セミコロン、タブ文字、改行文字、復帰改行文字から構成されます。
    token.hasMoreTokens() でトークンがまだあるかどうかを判定します。
    token.nextToken() で次のトークンを切り出します。
    //★ StringTokenizer でトークンを切り出す    前田 稔
    import java.util.StringTokenizer;
    
    class Token
    {   public static void main(String[] args)
        {
            String  str= " 1, 2, 3, 4, 5,";
            int     val;
    
            StringTokenizer token = new StringTokenizer(str, " ,;\t\r\n()", false);
            while(token.hasMoreTokens())
            {   val = Integer.parseInt(token.nextToken());
                System.out.println(val);
            }
        }
    }
    
  3. String str に次の値を設定して試してみて下さい。
    String str= " 10 9 8 7 6 5 4 3 2 1";
  4. float 型の数値を切り出すときも同じ要領です。
    Float.parseFloat(token.nextToken()); で文字列を float 型に変換します。
    import java.util.StringTokenizer;
    
    class Token
    {   public static void main(String[] args)
        {
            String  str= " 12 2.3 3.45 45.678";
            float   val;
    		
            StringTokenizer token = new StringTokenizer(str, " ,;\t\r\n()", false);
            while(token.hasMoreTokens())
            {   val = Float.parseFloat(token.nextToken());
                System.out.println(val);
            }
        }
    }
    

超初心者のプログラム入門(Java2)