質問: Windows10でEclipseを用いてJavaの勉強をしています。 かなりの初心者ですが、よろしくお願いします。 目的としては、txtファイルやcsvファイルなどに保管されたデータを用いて、計算結果を出力したいのです。 ファイルの中身は、例えば 佐藤,数値A:12%,数値B:6.6,数値C:83, 鈴木,数値A:10%,数値B:7.8,数値C:55, 田中,数値A:9%,数値B:7.1,数値C:no data, ...みたいな感じを想定しています。 このデータで、数値A×数値C= をしたり、数値Bの合計を求めるとか、数値Cの平均値と分散を求める とか、データ処理をしていけるようになりたいのです。 出力結果は、鈴木,X量:9.96とか、数値B平均:7.17とか、佐藤,数値C,検定Y:p<0.01 みたいなのをイメージしています。 要は、ふつうExcelでやるような計算です。 上記のデータ量だと、当然Excelの方が楽なのですが、最終的には100人とか1000人とか大量のデータを扱い、数値の種類も増え、複雑な統計処理なんかをできるようになりたいです。 上記の例では、データが無い時に数値の位置にno dataとか入ってきてしまいます。 実際、仕事になると、no dataが"-"だったり、"NC"とかだったり、ただの空欄""だったりする場合もあり得ます。 数字なのに"4.5*"(*は優位水準)とか"2.21E-8"だったりします。 こういった時に、うまく数字だけ取り出して、計算して、結果を出力させたいのです。 また、データ形式や統計処理などによって、大幅にプログラムを書き換えていては、間違いの元になりそうなので、ある程度シンプルで汎用性のある方法を知りたいのです。 そこで、漠然と「文字と数字を区別できるようにした方がいいかな」と思い、過去の質問1と、過去の質問2を見て、「NumberUtils(API)を使う方法がスッキリしていて良いかな」と思ったのですが、ダウンロードページやNumberUtils(API)のページを見ても、どこを見て何をどう使えばいいのやらサッパリ... きっと知っている人には何でもないページなんだと思うのですが、自分はそもそもNumberUtils(API)が何かもわかってないから、これを見ても情報が読み取れないんだと思うのです... それに、NumberUtils(API)は、とりあえず試してみようと思っただけで、これが最適かどうかもわかっていません。 これって、4.5を数字と判断します? "4"と".(数字以外)"と"5"とか判断されちゃいます? 数字かどうか判断するだけで、変数に代入するのは、また別? もしかしてNumberUtils(API)より簡単な方法ってありますか? それ以前に、別の方法を使えば数字かどうか判断する必要性すらなかったりします? ド素人過ぎて、何を疑問に思えばいいかもわからない状態ですが、最終的にファイル内の情報から数値("1"、"23%"、"4.5"、"6.7E-8"、"9**"のようなものを含む)を読み込んで計算できれば何でもいいです。 誰か助けて下さい。 この混乱状態を抜け出すきっかけとなれば、どんな情報でもいいです。 どうかよろしくお願いします。
回答: ArrayList> a2 に最後の表示部分までに全ての情報を区切って入れるコードです 区切っただけでdouble型への変換などはしていません 使おうとすればdouble型かどうかを判別してクラス型に名前と変数の型を分けて一行ずつ入れなおすなどの工夫が必要だと思います ``` import java.util.*; import java.io.*; public class ALL { public static void main(String[] args) { ArrayList a=new ArrayList<>(); ArrayList j=new ArrayList<>(); ArrayList> a2=new ArrayList<>(); try(BufferedReader br=new BufferedReader(new FileReader("B.csv"))){ String data=null; while((data=br.readLine())!=null){ a.add(data.split(",")); } }catch(Exception r){} for(int b=0;b p=new ArrayList<>(); Dat i=new Dat(); int co=0; for(String n :a.get(b)){ //s String[] c=n.split("[:|*|%|E]"); p.add(c); } a2.add(p); } for(ArrayList l:a2){ for(String[] l2:l){ for(String l3:l2){ System.out.print(l3+" & "); } System.out.print(" & "); } System.out.println(); } } } ```