【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

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を勉強するためのおすすめサイト、書籍がありましたら教えて下さい。

A 回答 (3件)

こんにちは!



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
    • good
    • 0
この回答へのお礼

ありがとうございます。
実行できました。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します。

とすればよいのでしょうか?
なにか抜けてる&スマートではない気がするのですが。

お礼日時:2004/10/25 22:02

J2SE 5.0ですと、


ご所望のscanfの代わりはjava.util.Scannerで実装されているようです。

まだ、私は試したことがありませんので、C言語同様の使い勝手かどうかは不明ですが。
    • good
    • 0

#1 の者です~。



出力に関しては、お礼に書いてあるとおりで問題ないと思いますよ。
x = br.readLine(); の左辺とか、タイプミスが結構ありましたが^^

あと、少し思ったのですが、座標を「(X, Y)」の形式でファイルに記録
することは本当に必要ですか?

単純に「X, Y」のようにコンマ区切りか、「X Y」のようにスペース区切り
でもよい気がします。

もしこれでも良ければ、java.util の StringTokenizer を使えば、
もっと簡単に読み取れます。

ちなみに結城さんの本は、友達にも強く勧めています^^
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報