1

テキストファイルをスキャンしてマップに追加しようとしていますが、マップはすべて機能しています。ただし、テキスト ファイルの「入力」または空白行になると、スキャナが停止しているようです。これは私の問題です

これがスキャナー/マッパーのコードブロックです

class OneButtonListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent evt)
    {
        final JFileChooser oneFC = new JFileChooser();
        oneFC.showOpenDialog(AnalysisFrame.this);
        String newLine = null;
        oneFC.getName(null);
        int returnVal = 0;
        File fileOne = oneFC.getSelectedFile();

        Scanner input = null;        
        try {
            input = new Scanner(fileOne);
        } 
        catch (FileNotFoundException ex) {
            Logger.getLogger(AnalysisFrame.class.getName()).log(Level.SEVERE, null,
                            ex);
        }                       
        inputText = input.nextLine(); 
        String[] words = inputText.split("[ \n\t\r,.;:!?(){}]");

        for(int i = 0; i < words.length; i++){
            key = words[i].toLowerCase(); 

            if (words[i].length() > 1){
                if (mapOne.get(key) == null){
                    mapOne.put(key, 1);
                }
                else {
                    value1 = mapOne.get(key).intValue();
                    value1++;
                    apOne.put(key, value1);
                }
            } 
         }
     }
}

助けてくれてありがとう!

4

4 に答える 4

1

ファイルの最後に到達するまで、ループ内をスキャンする必要があります。次に例を示します。

StringBuilder builder = new StringBuilder();
while(input.hasNextLine()){
    builder.append(input.nextLine());
    builder.append(" "); // might not be necessary
}
String inputText = builder.toString();

を使用する代わりに、 andの代わりにandを使用してDelimitersplit使用することもできます。試してみてください。動作するかどうかを確認してください。ScannerhasNext()next()hasNextLine()nextLine()

例えば:

scanner.useDelimiter("[ \n\t\r,.;:!?(){}]");
ArrayList<String> tokens = new ArrayList<String>();
while(scanner.hasNext()){
    tokens.add(scanner.next());
}

String[] words = tokens.toArray(new String[0]); // optional

また、JFileChooser毎回を作成する必要はありません。

class OneButtonListener implements ActionListener
{
    private final JFileChooser oneFC = new JFileChooser();

    @Override
    public void actionPerformed(ActionEvent evt)
    {
于 2012-06-05T04:27:13.947 に答える
0

非常に長い間 Java を使用していなかったので、私はかなりずれているかもしれませんが、呼び出し inputText = input.nextLine();は 1 回だけのように見えるので、1 行しか取得していないのは理にかなっています。nextLine()おそらく、ファイルの最後に到達するまで行を提供し続けるように、ループで呼び出したいと思うでしょう。

于 2012-06-05T04:27:32.910 に答える
0
String contentsOfWholeFile = new Scanner(file).useDelimiter("\\Z").next();
于 2012-06-05T05:27:11.240 に答える