Javaアプリで外部テキストからランダムに一行選んで表示する方法

このQ&Aのポイント
  • Javaアプリで外部テキストから行をランダムに選んで表示する方法について質問です。
  • BufferedReaderとStringTokenizerを使用し、外部テキストから読み込んだ行をランダムに選び文字列として表示する方法を教えてください。
  • また、ランダムに選んだ行を日本語テキストフィールドに表示する際にはどのように書き換えれば良いでしょうか。
回答を見る
  • ベストアンサー

読み込んだ行からランダムに選ぶ

外部テキストからBufferedReaderで読み込んだ行をStringTokenizerで * の前と後ろに分けて、 nichi ="" + st.nextToken(); ei ="" + st.nextToken(); というように取得しています。 これをsetTextメソッドで文字列として表示しているのですが、順に読み込んだ中からランダムに選ぶ場合はどうすれば良いでしょうか import java.applet.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; public class examination extends Applet implements ActionListener{ Button Check, Next; TextField jap, eng, seigo; String wrs; String nichi, ei; public void init(){ setBackground(new Color(200, 200, 200)); add(new Label("[ japanese ]")); jap = new TextField("", 30); add(jap); add(new Label("[ english ]")); eng = new TextField("", 30); add(eng); Check = new Button("正誤判定"); Check.addActionListener(this); add(Check); seigo = new TextField("", 3); add(seigo); Next = new Button("次の問題へ進む"); Next.addActionListener(this); add(Next); } public void actionPerformed(ActionEvent e){ try{ if(e.getSource() == Next){ BufferedReader wordsfile = new BufferedReader(new FileReader("D:/list.txt")); while ((wrs=wordsfile.readLine())!= null){ StringTokenizer st = new StringTokenizer(wrs," * "); nichi ="" + st.nextToken(); ei ="" + st.nextToken(); jap.setText(nichi); ← } wordsfile.close(); }(以下省略) ←の部分ですが、このままだと最後に読み込んだ行のnichiが表示されますよね? これを読み込んだ中からランダムに一行選んで表示するにはどうすれば良いでしょうか。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

全行をArrayListに収めておいて、乱数で取り出す行を決める。 なお、StringTokenizerは、古い、非推奨のAPIなので、Stringクラスのsplit()メソッドを代わりに使ってください。

関連するQ&A

  • 読み込んだテキストの改行表示

    javaを用いて、プログラミングしているのですが 読み込んだテキストの改行表示の仕方で困っています。 プログラムは、日本語か英語で単語を入力(例:一、one)すると 読み込むwords.txtから対応するスペイン語(例:一 * one * UNO ⇒UNO)を textareaに表示するというものです。 このとき、読み込んだwords.txtは現在は 一 * one * UNO 二 * two * DOS … となっているのですが、このスペイン語の部分に日本語の注釈をつけ 数行に渡ってtextareaに表示したいと思っています。 説明が拙く少し分かりづらいですが、画像などを参照してくださると助かります。 具体的には、今はスペイン語のtextareaに  UNO とだけ表示されているものを  UNO  [数]一つの といったように表示するにはどうすれば良いでしょう? 一応、該当部分のソースコードも載せておきます。 質問の仕方も悪いですが、どうかよろしくお願いします。 public void actionPerformed(ActionEvent e){ try{ if(e.getSource() == Honyaku){ BufferedReader wordsfile = new BufferedReader(new FileReader("Z:/09sotsuron/words.txt")); while ((wrs=wordsfile.readLine())!= null){ StringTokenizer st = new StringTokenizer(wrs," * "); nichi ="" + st.nextToken(); ei ="" + st.nextToken(); supe = "" + st.nextToken(); if ((jap.getText()).equals(nichi)){ eng.setText(ei); spa.setText(supe); } else if ((eng.getText()).equals(ei)){ jap.setText(nichi); spa.setText(supe); } } wordsfile.close(); } else if(e.getSource() == Clear){ nichi = ""; ei =""; supe = ""; jap.setText(nichi); eng.setText(ei); spa.setText(supe); } } catch(IOException ie){ System.exit(1); } }

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • 小数の2進数変換について教えてください。

    10進数を2進数に変換するプログラムを作ったのですが、 小数の2進数変換が出来ません。 小数を2進数に変換するにはどうしたらいいのでしょうか? よろしくお願いします。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class Applet1 extends Applet { TextField textField1 = new TextField(10); TextField textField2 = new TextField(10); Button displayButton1 = new Button("2進数変換"); public void init() { displayButton1 = new Button("2進数変換"); add(new Label("10進数")); add(textField1); add(textField2); add(displayButton1); displayButton1.addActionListener(new ToBinaryAction()); } class ToBinaryAction implements ActionListener{ public void actionPerformed(ActionEvent e) { int x = Integer.valueOf(textField1.getText()).intValue(); textField2.setText(Integer.toBinaryString(x)); } } }

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

    JAVAの勉強をしているのですが、StringTokenizerの役割がよく分かりません。検索サイトを使って色々調べてみたのですが、「トークンを区切る」だとかよく分からない言葉が出てきて全く理解できません。以下はあるデータから項目を抽出するプログラムらしいのですが、参考としてこの例でStringTokenizerがどのような役割を果たしているのか教えて下さい。複雑で説明しにくければStringTokenizerそのものの説明でも十分です。よろしくお願いします。 BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String line=""; try { int i=0; while ((line = reader.readLine()) != null) { int fcount=1; StringTokenizer st = new StringTokenizer(line); while (st.hasMoreTokens()) { switch (fcount) { case 2: //項目2:被説明変数Y data[i][0]=Integer.parseInt(st.nextToken()); break; case 4: //項目4:説明変数X data[i][1]=Integer.parseInt(st.nextToken()); break; default: // その他の項目 String dummy=st.nextToken(); break; } fcount++; } i++; } NofData=i;

    • ベストアンサー
    • Java
  • javaを用いて,a列,b列の空白数を数えたい.

    javaを使って,a列,b列の空白数を数えるプログラムを教えてください. 自分なりに色々と考えてみましたが全くわかりません… おカぞえ,どうぞよろしくお願いいたします. 初心者のため,具体的に教えていただけるとありがたいです. 以下に途中まで考えたコードを添付いたします. 自分としましては,空白に-9を代入し,後でそれを数えるというような方法を考えました. import java.io.*; import java.util.*; public class PTMain { public static void main(String[] args) { try{ BufferedReader fin = new BufferedReader(new FileReader("test.csv")); String ss ; String a; String b; fin.readLine(); while((ss=fin.readLine())!=null){ StringTokenizer st =new StringTokenizer(ss,","); a = st.nextToken(); b = st.nextToken(); if (a.equals(null)){ a="-9" ; //もし空白があるなら-9を代入したい } if (b.equals(null)){ b="-9" ; } System.out.println("a = " + a); System.out.println("b = " + b); } } } } /* test.csv a,b,c,d 5,6,3, 4,,8,1 ,6,7, 5,7,8,8 9,1,45,1 6,6,, ,1,8,5 5,4,5, */

  • java applet

    import java. applet.*; import java. awt. Button; import java. awt. Label; import java. awt. TextField; import java. awt. event.*; public class 1120 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private TextField box2 = new TextField(5); private TextField box3 = new TextField(5); private Label moji1 = new Label(" と "); private Label moji2 = new Label(" の和は "); private Label moji3 = new Label(" である。 "); private Button ok = new Button("OK"); public void init() { resize( 320 , 240); add( box1 ); add( moji1 ); add( box2 ); add( moji2 ); add( box3 ); add( moji3 ); add( ok ); ok.addActionListener( this ); } public void actionPerformed( ActionEvent e ) { int i=0 ,j =0 , k; String t1 = box1.getText(); String t2 = box2.getText(); i = Integer.parseInt( t1 ); j = Integer.parseInt( t2 ); k = i + j; String s = Integer.toString( k ); box3. setText( s ); } } //上記のプログラムを書いたのですが、なぜかエラーが出てしまいます。勿論、自分でも見直しましたが、その理由がわかりませんでした。知識のある方、ご回答の方お願いします。

  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • GUIを使用した電卓のボタンの表示について

    Javaの課題で電卓を制作しています。 まず見た目だけ完成させるべくボタンを配置を配置しましたが、 実行してみると正しく表示されるときと、されないときがあります(画像参照)。 現時点でのコードを掲載いたしますので、是非アドバイスをいただけると幸いです。よろしくお願いします。 ■以下コード package add; import java.awt.Button; import java.awt.Frame; import java.awt.TextField; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Calc extends Frame{ public static void main(String[] args){ Calc frame = new Calc(); } public Calc(){ super("電卓"); setSize(317,360); setVisible(true); addWindowListener(new CalcWindow()); //下記のウィンドウを閉じる用 //ボタンとフィールドの追加 TextField result = new TextField(""); result.setBounds(20,50,270,50); add(result); result.setFocusable(false); Button button1 = new Button("1"); button1.setBounds(20,120,70,30); add(button1); Button button2 = new Button("2"); button2.setBounds(100,120,70,30); add(button2); Button button3 = new Button("3"); button3.setBounds(180,120,70,30); add(button3); Button button4 = new Button("4"); button4.setBounds(20,165,70,30); add(button4); Button button5 = new Button("5"); button5.setBounds(100,165,70,30); add(button5); Button button6 = new Button("6"); button6.setBounds(180,165,70,30); add(button6); Button button7 = new Button("7"); button7.setBounds(20,210,70,30); add(button7); Button button8 = new Button("8"); button8.setBounds(100,210,70,30); add(button8); Button button9 = new Button("9"); button9.setBounds(180,210,70,30); add(button9); Button button0 = new Button("0"); button0.setBounds(100,255,70,30); add(button0); Button buttonC = new Button("C"); buttonC.setBounds(20,255,70,30); add(buttonC); Button buttonasta = new Button("."); buttonasta.setBounds(180,255,70,30); add(buttonasta); Button buttonplus = new Button("+"); buttonplus.setBounds(260,120,30,30); add(buttonplus); Button buttonminus = new Button("-"); buttonminus.setBounds(260,165,30,30); add(buttonminus); Button buttonkakeru = new Button("×"); buttonkakeru.setBounds(260,210,30,30); add(buttonkakeru); Button buttonsla = new Button("/"); buttonsla.setBounds(260,255,30,30); add(buttonsla); Button buttonE = new Button("="); buttonE.setBounds(20,300,270,30); add(buttonE); //ボタンとフィールドの追加ここまで } class CalcWindow extends WindowAdapter //ウィンドウを閉じる { public void windowClosing(WindowEvent e) { System.exit(0); } } } ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • 簡易電卓が作れない…

    簡易電卓を作ろうとしているのですが、どうしても分からない所があります。 とりあえずテストの為、以下のようなプログラムを作りました。 「dentaku.java」 import java.awt.*; import java.awt.event.*; class dentaku{ public static void main(String[] agrs){ Frame frame=new Frame("電卓"); frame.setSize(500,800); frame.setLayout(null); Button button0=new Button("0"); button0.setLocation(10,710); button0.setSize(80,80); Button buttonC=new Button("C"); buttonC.setLocation(100,710); buttonC.setSize(80,80); Button button1=new Button("1"); button1.setLocation(10,620); button1.setSize(80,80); Button button2=new Button("2"); button2.setLocation(100,620); button2.setSize(80,80); Button button3=new Button("3"); button3.setLocation(190,620); button3.setSize(80,80); Button button4=new Button("4"); button4.setLocation(10,530); button4.setSize(80,80); Button button5=new Button("5"); button5.setLocation(100,530); button5.setSize(80,80); Button button6=new Button("6"); button6.setLocation(190,530); button6.setSize(80,80); Button button7=new Button("7"); button7.setLocation(10,440); button7.setSize(80,80); Button button8=new Button("8"); button8.setLocation(100,440); button8.setSize(80,80); Button button9=new Button("9"); button9.setLocation(190,440); button9.setSize(80,80); Button buttonP=new Button("+"); buttonP.setLocation(280,440); buttonP.setSize(80,80); Button buttonM=new Button("-"); buttonM.setLocation(280,530); buttonM.setSize(80,80); Button buttonK=new Button("×"); buttonK.setLocation(280,620); buttonK.setSize(80,80); Button buttonW=new Button("÷"); buttonW.setLocation(280,710); buttonW.setSize(80,80); TextField nyuuryoku = new TextField(""); nyuuryoku.setLocation(10,380); nyuuryoku.setSize(350,50); TextField kekka = new TextField("0"); kekka.setLocation(10,320); kekka.setSize(350,50); button1.addActionListener(new dentaku_num(nyuuryoku)); button2.addActionListener(new dentaku_num(nyuuryoku)); frame.add(button0); frame.add(buttonC); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.add(button6); frame.add(button7); frame.add(button8); frame.add(button9); frame.add(buttonP); frame.add(buttonM); frame.add(buttonK); frame.add(buttonW); frame.add(nyuuryoku); frame.add(kekka); frame.setVisible(true); } } 「dentaku_num.java」 import java.awt.*; import java.awt.event.*; class dentaku_num implements ActionListener{ TextField txt; int num=0; Button button1; Button button2; dentaku_num(TextField txt){ this.txt = txt; } public void actionPerformed(ActionEvent e){ if(e.getSource()== button1) {num=1;} if(e.getSource()== button2) {num=2;} txt.setText(String.valueOf(num)); } } 予想では、「1」を押したら下のテクストボックスに1が、「2」を押したら2が表示されると思いました。 しかし結果は、両方とも「0」が表示されるだけです。 不思議に思い、「if(e.getSorce)~」の2文を消してみたら、これも同じ結果でした。 どうやら、eを受け取っていない(?)ようなのですが、どの様にしたらうまく行くでしょうか。 見づらい分だとは思いますが、宜しくお願いします。

    • ベストアンサー
    • Java
  • 整数を好きなだけ入力し、個数、合計、平均値を表示するプログラム

    appletviewerに、ボックスの中に整数を好きなだけ入力し、個数、合計、平均値を以下のように表示させるようなプログラムを作りたいです。(1,2,3を入力した場合)     データ□ (入力)        (計算)   個数=3   合計=6   平均値=2 ※□はボックスです。(入力)(計算)はクリックするボタンです。 どなたかご指導やアドバイスをお願いいたします。まだまだ初心者でとても困っています。。 ちなみに途中まで考えたのが以下のプログラムです。 import java.applet.*; import java.awt.Button; import java.awt.Label; import java.awt.TextField; import java.awt.event.*; public class Lec1106 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private Label moji1 = new Label("データ"); private Label moji2 = new Label("個数="); private Label moji3 = new Label("合計="); private Label moji4 = new Label("平均値="); private Button nyuuryoku = new Button("入力"); private Button keisan = new Button("計算"); public void init() { resize(320,240); add(moji1); add(box1); add(nyuuryoku); nyuuryoku.addActionListener(this); add(keisan); keisan.addActionListener(this); add(moji2); add(moji3); add(moji4); } public void actionPerformed(ActionEvent e)  {int i; String t1=box1.getText(); i=Integer.parseInt(t1);

    • ベストアンサー
    • Java

専門家に質問してみよう