Java:扫描仪停在新线路上

时间:2012-06-05 04:20:53

标签: java java.util.scanner

我正在尝试扫描文本文件并将它们添加到地图中,地图和一切正常。 然而,当涉及到文本文件中的“输入”或空行时,扫描程序似乎停止了。这是我的问题

这是我的扫描仪/映射器代码块

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 个答案:

答案 0 :(得分:1)

您应该在循环内扫描,直到它到达文件末尾,例如:

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

使用split的替代方法可以是Scanner使用hasNext()并使用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) {

{{1}}

答案 1 :(得分:0)

在很长一段时间内没有使用Java我可能会离开,但看起来你只需要调用inputText = input.nextLine();一次,所以你只得到一行是有意义的。大概你想在一个循环中调用nextLine(),这样它就会一直给你一行直到它到达文件的末尾。

答案 2 :(得分:0)

String contentsOfWholeFile = new Scanner(file).useDelimiter("\\Z").next();

答案 3 :(得分:0)

split("[ \n\t\r,.;:!?(){}]") 添加 \f