• 締切済み

javaのStringデーターの読込みについて

javaのStringTokenizerを使用しました、ストリングデーターの読み取りに ついて質問します。 入力ファイルの200.0から800.0の7個のデーターは読取ることが出来ます。 次の行の200.0を読込みますと、『str=st.nextToken(); 』でエラーになります。 Q1)このエラーの原因について、コメント頂けますと大変助かります。 //入力ファイル 200.0 300.0 400.0 500.0 600.0 700.0 800.0 200.0 2000.0 4000.0 110 //ファイルの読取コード void fileIn_f_snd_chk_etc(){ String strX; String str; try{ File file = new File("c:\\TRSX700\\file_snd_chk_etc.txt"); if (myMsrCtlPanel.checkBeforeReadfile(file)){ BufferedReader bread = new BufferedReader(new FileReader(file)); int j=0; while((strX = bread.readLine()) != null){ //<----String[] values = str.split(" * ",0); StringTokenizer st=new StringTokenizer(strX," * "); //====================== for(int i=0; i<7; i++){ //ブランクは読み飛ばしている str=st.nextToken(); f_snd_chk[i].setText(str); //fileIn_f_snd_chk_etc() // System.out.print(f_snd_chk[i].getText()+" "); } // System.out.println(""); //ここまでは、正常読取 //====================== str=st.nextToken(); //ここでエラーになる f_imp_chk.setText(str); //fileIn_f_snd_chk_etc() // System.out.print(f_imp_chk+" "); //====================== str=st.nextToken(); f_dst_chk.setText(str); //fileIn_f_snd_chk_etc() // System.out.print(f_dst_chk+" "); //====================== str=st.nextToken(); f_fft_chk.setText(str); //fileIn_f_snd_chk_etc() // System.out.print(f_fft_chk+" "); //====================== str=st.nextToken(); key_data.setText(str); //fileIn_f_snd_chk_etc() System.out.print("f_imp_chk="+f_imp_chk.getText()+" f_dst_chk="+f_dst_chk.getText()+" f_fft_chk="+f_fft_chk.getText()+" key_data="+key_data.getText()); } //while bread.close(); } //if else{ System.out.println("ファイルが見つからないか開けません"); } } //try catch(FileNotFoundException e){ System.out.println("FileNotFoundException: "+e); } catch(IOException e){ System.out.println("IOException: "+e); } System.out.println("file_inの終了"); } //fileIn_f_snd_chk_etc() //以上

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

noname#212058
noname#212058
回答No.1

ファイルの1行目のデータしか読み込んでいない状態で、2行目以降のデータを st.nextToken() で読もうとするからです。while((strX = bread.readLine()) != null) の動きをきちんと把握してください。 strX = bread.readLine() を1回実行すると、strX にはファイルから読み込んだ1行のデータがセットされます。読み込んだ後、その行のデータを取得して処理していますが、ここまでは正常に行けますね。そのあと strX からさらに2行目を読もうとしていますが、そもそも strX には1行分しかデータが入っていないので、2行目を読もうすれば『そんなもの無いよ!』と怒られるのは当然です。 そもそもこのプログラム、StringTokenizer の使い方が全くおかしいです。きちんとマニュアルを読んで、機能を理解して使っていますか? プログラムは適当に組んでも動かないですよ。 https://docs.oracle.com/javase/jp/6/api/java/util/StringTokenizer.html

関連するQ&A

  • String#replaceALL

    をつかって 「俺は~」を「私は~」 に変えたいのですが、 String str = "俺は天才だ。冗談だ"; str.replaceAll("俺", "私"); System.out.println(str.toString()); ではうまく行きません。 正規表現とかよく知らないので教えてください。

    • ベストアンサー
    • Java
  • javaについて

    以下のプログラムで[\\D]+はどういう働きをしているのか分からないので教えていただけますでしょうか。 実行結果は 1990 と表示されます。 よろしくお願いいたします。 public class split{ public static void main (String[]args){ String s = "明日は1990年です。"; String [] str = s.split("[\\D]+"); for( String st: str ){ if( !st.equals("") ){ System.out.println( st ); } } } }

    • ベストアンサー
    • Java
  • javaについて

    以下のようにキーボードから入力していくプログラムを試行しているのですが、エラーが出てくるので行き詰まっています。 理想的にはキーボードに”あいう”エンター”えおか”エンターと打ち込んだら str[0]=あいう str[1]=えおか と表示させていきたいのですが、よろしくお願いします。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu2 { public static void main(String[] args) throws IOException { int i=0; while(i<2){ System.out.println("キーワード入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); char str[] = input.toCharArray(); System.out.println("キーワードは" + str[]); i=i+1; } for(i=0;i<2;i++){ System.out.println(str[]); } } } これがエラー表示です。 gugu2.java:17: '.class' がありません。 System.out.println("キーワードは" + str[]); ^ gugu2.java:21: '.class' がありません。 System.out.println(str[]); ^ エラー 2 個

    • ベストアンサー
    • Java
  • java プログラミングについて

    独学でjavaに挑戦中ですが、書店で購入した本のソースプログラムを少し変えたいのですが、ご教授をお願いします。数当てゲームのプログラムで、一つの設問を正解すると終了するゲームですが、複数の設問を設定したいのです、質問がうまく伝わるか不安ですがよろしくお願いします、プログラムを少しだけ書いておきます。 import java.io.*; class Mojiretuate { public static void main(String[] args) throws IOException { String str = "こんにちは";  /*質問箇所*/ String str2; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列当てゲームです。"); System.out.println("答えは何かのあいさつです。"); for(;;){ System.out.println("\n入力:"); str2 = br.readLine(); System.out.println("入力文字列の長さ:" + str2.length()); if(str.equals(str2)){ System.out.println("正解です!"); break; } 

    • ベストアンサー
    • Java
  • JAVAについて

    現在JAVAについて学んでいるのですが、下記のソースが実行出来ません。どなたかわかる方、回答宜しくお願いいたします。 public class Lound { void main(String[] args) { String rtn = methWithParamReturn(3); if(rtn.equals("0")) System.out.println("0あかんよ"); else System.out.println(rtn); } public String methWithParamReturn(int x) { System.out.println(x); x= x*x; String str = String.valueOf(x); return str; } }

  • Javaで計算

    Javaを10月から始めた初心者です。 摂氏から華氏に変えるプログラムを作成したいのですが、結果が合いません。 計算の所のプログラムが間違っているのだと思うのですが、どうすれば良いのか分からないので教えてください。 import java.io.*; class quiz01{ public static void main(String[] args) throws IOException{ System.out.println("摂氏の温度℃を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int F = 9/5*num+32; System.out.println("華氏の温度Fは " + F + " です。"); } } よろしくお願いします!

    • ベストアンサー
    • Java
  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • javaに関しての質問です (エラー)

    最近javaの勉強を始めたばかりの者です とある動画をみながら勉強をしていたのですが なぜかエラーが出てしまいます。 エラーの内容は... エラー:この文に制御が移ることはありません     if( c== 13){ エラー:return文が指定されていません この二つです、もし解決方法がわかる方がいましたらぜひ教えてくれるとうれしいです 下がソースコードになります。 public class part01 { static String name = "すけさん"; static int lv = 30; public static void main( String[] args )throws java.io.IOException { putzyosyou(); // 序章を表示 putcommnd(); if(lv<40){ putgameover(); }else{ putgamecrear(); } } public static void putzyosyou() { System.out.println("魔王が世界を滅ぼそうとしている。"); System.out.println(name + "はレベルが" + lv + "のツワモノです"); } public static void putcommnd()throws java.io.IOException { System.out.println("1.魔王を倒しに行く"); System.out.println("2.修行する"); System.out.println("3.だれかに頼る"); System.out.println("4.そんなことよりも寝よう"); int c = inputcommnd(); if( c== '1' ){ System.out.println("魔王が現れた!!"); }else if( c== '2' ){ lv += 2; System.out.println ("レベルが"+ lv + "になった!!"); putcommnd(); } } public static int inputcommnd()throws java.io.IOException { int c = System.in.read(); if( c== 10){ return( inputcommnd() ); if( c== 13){ return( inputcommnd() ); } return( c ); } } public static void putgameover() { System.out.println(name + "は負けました。"); System.out.println("GAME OVER"); } public static void putgamecrear() { String str = name + "は魔王を倒しました。"; put( str ); if(lv>120){ System.out.println("レベル" + lv + "なので魔王ゴミでした"); }else if(lv>80){ System.out.println("レベル" + lv + "なので余裕でした"); }else if(lv>50){ System.out.println("レベル" + lv + "なので倒せました"); }else{ System.out.println("レベル" + lv + "なので苦戦しました"); } System.out.println("GAME CREAR"); } static void put( String str ) { System.out.println( str ); } }

    • ベストアンサー
    • Java
  • Javaがうまく動作しない理由

    Java初心者です。 下記のJavaのプログラムで(6)のところで(1)から(4)が呼び出されると(1)と(4)はうまく動作して画面に表示されるのですが(2)(3)がうまく動きません。ソースは長いので全部掲載できませんが、基本的にはほかの部分はうまく動いています。(5)ではうまくテキストフィールドfield2に文字が表示されます。 原因と対処方法を教えてください。 public ChatServer(){ ............ field1 = new TextField("ABC"); field1.setLocation(10,30); field1.setSize(150,25); field1.addActionListener(this); add(field1); field2 = new TextField("DEF"); field2.setLocation(10,60); field2.setSize(150,25); add(field2); ............ public void text1(String ss){ (1) System.out.println("1:*****" + ss); (2) field2.setText(ss); (3) field1.setText("AAA"); (4) System.out.println("2:*****" + ss); } public void actionPerformed(ActionEvent e){ String ss; if(e.getSource() == field1){ ss = field1.getText(); (5) field2.setText(ss); } } } class clientProc implements Runnable { ChatServer serv2 = new ChatServer(); ............. String line = in.readLine(); while (!"quit".equals(line)){ line = in.readLine(); (6) serv2.text1(line); System.out.println("***"); } .............. }

  • JAVAのプログラムについて

    独学でJAVAを勉強中なのですが、 import java.io.*; public class ExserciseD5L3_2{ public static void main(String args[]){ BufferedReader br = new BufferedReader(newInputStreamReader(System.in),1); try{ System.out.println("■■■計算クイズ■■■"); System.out.println("計算してください。"); String Que[] = {"10×50=?","21-7=?","360÷6=?"}; int Ans[] = {500,14,60}; int counter; for(counter = 0; counter <=2; counter++ ){ System.out.println(Que[counter]); System.out.println("答えは?"); String str = br.readLine(); int i = Integer.parseInt(str); if(i == Ans[counter]){ System.out.println("おめでとう!大当たりです。"); } else{ System.out.println("残念!答えは"+Ans[counter]+"です。"); } } } catch(IOException e){ System.out.println("IOエラーが発生しました。"); } catch(NumberFormatException ne){ System.out.println("入力された数値が正しくないようです。"); } } } これを実行すると ■■■計算クイズ■■■ 計算してください。 10×50=? 答えは? 500 おめでとう!大当たりです。 21-7=? 答えは? 14 おめでとう!大当たりです。 360÷6=? 答えは? 60 おめでとう!大当たりです。 となるのですが、これに おめでとう!正解数は3つです。とか正解数は2つですなどのように 正解数も出るようにするにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう