JAVAを勉強中でファイル入出力で困っているので教えて下さい。
あるファイル(sample.txt)があるとします。
[sample.txt]
(0,0)
(10,20)
このファイルは(x座標,y座標)のフォーマットで1行に1座標が書き込まれているとします。
ここからx座標、y座標をそれぞれ変数x,yに代入することはできるのでしょうか?
C言語だと ("%d,%d",&x,&y)のような形でそれぞれ読み書きできたと思うのですが、
while((x_data = input.readLine()) != null){
y_data = input.readLine();
area_data.addElement(new Area(x_data,y_data));
}
というかたちで
0
0
10
20
と1行に1文字ずつしか読み書きできません。
ご存じの方は是非教えて下さい。
また、JAVAを勉強するためのおすすめサイト、書籍がありましたら教えて下さい。
No.1ベストアンサー
- 回答日時:
こんにちは!
StreamTokenizer を利用する方法です。
java.io をインポートしてください。
try {
FileReader r = new FileReader("sample.txt");
StreamTokenizer st = new StreamTokenizer(r);
st.whitespaceChars('(', ')');
st.whitespaceChars(',', ',');
while (st.nextToken() != StreamTokenizer.TT_EOF) {
double x = st.nval;
st.nextToken();
double y = st.nval;
System.out.println("x = " + x + ", y = " + y);
}
}
catch (Exception e) {
e.printStackTrace();
}
私は、結城浩さんの「Java 言語プログラミングレッスン」で Java を学びました。
http://www.hyuki.com/jb/index.html
ありがとうございます。
実行できました。SUNのAPI仕様を見てioっぽいなとは思ったんですが、多くて(^_^;)
勉強になりました。
結城さんの本はperlでお世話になりました。
「独習」と悩みました。そのときは目次をみてもさっぱりだったのですが、また本屋で見てみようと思います。
あと、書き込みなんですが、
System.out.print("x値を入力 : ");
x = br.readLine();
System.out.print("y値を入力 : ");
y = br.readLine();
x = Integer.parseInt(x_data);
y = Integer.parseInt(y_data);
として、
PrintWriter output = 続き略。
for(int i=0; i < area_data.size(); i++){
output.println("("+area_data.elementAt(i)).getX()+","
((Area)rea_data.elementAt(i)).getY()+")");
}output.close();
注:)getX(),getY()はxとyをreturnします。
とすればよいのでしょうか?
なにか抜けてる&スマートではない気がするのですが。
No.3
- 回答日時:
J2SE 5.0ですと、
ご所望のscanfの代わりはjava.util.Scannerで実装されているようです。
まだ、私は試したことがありませんので、C言語同様の使い勝手かどうかは不明ですが。
No.2
- 回答日時:
#1 の者です~。
出力に関しては、お礼に書いてあるとおりで問題ないと思いますよ。
x = br.readLine(); の左辺とか、タイプミスが結構ありましたが^^
あと、少し思ったのですが、座標を「(X, Y)」の形式でファイルに記録
することは本当に必要ですか?
単純に「X, Y」のようにコンマ区切りか、「X Y」のようにスペース区切り
でもよい気がします。
もしこれでも良ければ、java.util の StringTokenizer を使えば、
もっと簡単に読み取れます。
ちなみに結城さんの本は、友達にも強く勧めています^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マインクラフト(pc版)で座標...
-
グラフの交点の求め方(Excel)
-
直線上にある点の座標の求め方
-
y=x^2の座標をプロットするプロ...
-
任意の座標が、閉図形の内側か...
-
エクセルで回転する座標の出し方
-
ワード上Shapeの位置情報を統一...
-
C言語で制作するピラミッドアー...
-
ピクセルの座標を取得するには
-
エクセルシート上のマウスポイ...
-
Access2000レポートの罫線
-
Tiny Basicでのグラフィック。。
-
VB6のPrinter.ScaleWidth に対...
-
3次元空間上の2つの座標から...
-
∠ABCに内接する円の中心・接点...
-
Pythonの質問です。 input関数...
-
複数コントロール(ラベル)を...
-
VB.netでSTLファイルの分離
-
エクセルである点からの距離で...
-
添削お願いします(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
以下のプログラムは重心を求め...
-
ダイアログ内コントロールの位...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
シーケンサー(PLC?)で制...
-
C言語 配列で座標
-
始点、終点の二つの座標と半径...
-
閉図形の座標の配列が右回りか...
-
一番近い点を見つけたい。
-
ワード上Shapeの位置情報を統一...
-
最小二乗平面
-
多角形の内部かどうか判定する方法
-
タッチパッドのタッチ座標取得
-
Excel VBA で自在に図形を変化...
-
座標を持った平面範囲に座標を...
-
ピクチャボックスの座標取得
-
DirectInputでの現在のマウス座...
おすすめ情報