みその計算物理学
ホーム はじめに リンク集
ファイルに書き込まれた(特に1E-5のような形式で書かれた)浮動小数点数を読み込み配列に代入する方法
  • 浮動小数点数

    例えば7.87948E-11のように書き込まれた数値データファイルを読み込むとする。ここで厄介なのはEである。Eを含めて数値であるとして変数などに代入するのは結構ややこしい。そこで用いるのがStringTokenizerクラスである。ここではこのクラスを使って数値を読み込んでいく。

    StringTokenizerクラスを使うには以下のように宣言する。区切る文字は任意に決められる。多くは空白文字を使うだろう。

    StringTokenizer オブジェクト名=new StringTokenizer(文字列,"区切る文字")

    文字列は区切る文字でトークンとして分けれるが、トークンが無くなり次第処理を終わらせたい場合に便利なのが

    st.hasMoreTokens()

    である。このメソッドは、まだトークンがある場合は真を返し、無い場合は偽を返す。またトークンが欲しい場合は

    オブジェクト名.nextToken()

    を使う。トークンを入れる変数の型に応じて適した型に変える。

  • プログラム例

    このプログラムで読み込むファイル名はinput.dataである。input.dataには以下の通りの内容の数値データが書き込まれているとする。

    0 -138.77787807814457 0.0
    1 1.354472090042691E-14 -5.9445070393904231E-14
    2 2.5091040356528538E-14 -6.533228819050052E-14
    3 6.4392935428259079E-15 3.4340585930436873E-14
    4 1.3433698597964394E-14 2.7857924300711545E-14
    5 -1.4765966227514582E-14 -1.5872719805187785E-15
    6 5.2291504459844873E-14 4.7170600758761339E-14
    7 -1.787459069646502E-14 -4.8745729674948279E-14
    8 1.3766765505351941E-14 -2.0643209364124004E-14
    9 2.8199664825478976E-14 5.8491406162985982E-14
    10 -9.0483176506950258E-14 -1.1823875212257917E-14
    import java.io.*;
    import java.util.*;
    
    class Fileread
    {
            public static void main(String arg[])
            {
                    int i=0;
                    double a[]=new double[100];     //データの個数に応じて配列の容量に余裕を持たせておく
                    String s="";
    
                    try
                    {
                            FileReader fr=new FileReader("input.data");
                            BufferedReader br=new BufferedReader(fr);
    
                            while((s=br.readLine())!=null)  //ファイルから1行ずつ読み取る
                            {
                                    StringTokenizer st=new StringTokenizer(s," ");  //空白で区切る
    
                                    while(st.hasMoreTokens())       //次のトークンがある限りループを続ける
                                    {
                                            a[i]=Double.parseDouble(st.nextToken());
                                            i++;
                                    }
                            }
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);
                    }
    
                    for(int j=0;j<i;j++)
                            System.out.println(a[j]);       //代入されたデータを表示
            }
    }
    
  • プログラム実行結果

    プログラムを実行すると以下の通りに画面に表示される。

    0.0
    -138.77787807814457
    0.0
    1.0
    1.354472090042691E-14
    -5.9445070393904231E-14
    2.0
    2.5091040356528538E-14
    -6.533228819050052E-14
    3.0
    6.4392935428259079E-15
    3.4340585930436873E-14
    4.0
    1.3433698597964394E-14
    2.7857924300711545E-14
    5.0
    -1.4765966227514582E-14
    -1.5872719805187785E-15
    6.0
    5.2291504459844873E-14
    4.7170600758761339E-14
    7.0
    -1.787459069646502E-14
    -4.8745729674948279E-14
    8.0
    1.3766765505351941E-14
    -2.0643209364124004E-14
    9.0
    2.8199664825478976E-14
    5.8491406162985982E-14
    10.0
    -9.0483176506950258E-14
    -1.1823875212257917E-14
    Press any key to continue

Java講座一覧に戻る