0

テキストファイルを解析する方法を理解しようとしています。テキスト ファイルが特定の形式でない場合は、コンテンツを印刷しないでください。

最初の行は S で始まり、すべての行は次のいずれかの形式になります。

S:×

V:x

V:xxx

ここで、x は任意の大文字、0、1、または e です。

ここに私のコードがあります:

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;

class myjFileChooser {

 public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            final JFrame f = new JFrame("Document Viewer");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            final JFileChooser fileChooser = new JFileChooser();

            JPanel gui = new JPanel(new BorderLayout());

            final JEditorPane document = new JEditorPane();
            gui.add(new JScrollPane(document), BorderLayout.CENTER);

            JButton open = new JButton("Open");
            open.addActionListener( new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    int result = fileChooser.showOpenDialog(f);
                    if (result==JFileChooser.APPROVE_OPTION) {
                        File file = fileChooser.getSelectedFile();
                        try {
                            document.setPage(file.toURI().toURL());
                        } catch(Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
            gui.add(open, BorderLayout.NORTH);

            f.setContentPane(gui);
            f.pack();
            f.setSize(400,300);
            f.setLocationByPlatform(true);

            f.setVisible(true);
        }
    });
   }
 }
4

1 に答える 1

0

要件をいくつかの部分に分割することをお勧めします。

最初に、入力としてテキスト行を取得し、必要なフォーマットを満たす場合にboolean checkFormat(String line)返すプロシージャを作成します。true

次に、ファイルを 1 行ずつ読み取ります。checkFormat()プロシージャの呼び出しによって、各行の形式が問題ないかどうかを確認します。そうでない場合は、完了であり、何も印刷する必要はありません。

3 番目に、すべての行チェックに問題がなければ、もう一度ファイルを 1 行ずつ読み取り、各行を出力します。

以下は、テキスト ファイルを 1 行ずつ読み取る例です: http://rosettacode.org/wiki/Read_a_file_line_by_line#Java

于 2012-10-16T15:37:46.493 に答える