如何让扫描仪读取多行?

时间:2014-03-20 02:56:36

标签: java java.util.scanner

我有一个文本语料库,我必须阅读,分割,排序和执行其他操作。 在一开始,当我拆分它时,我看到扫描仪只读取一行。这是代码:

public class CorpusTest {
    public static void processCorpus(Scanner scanner) throws IOException{
        String line="0";
        while (scanner.hasNextLine()) {
            line = scanner.nextLine();
        }

        String[] w = line.replaceAll("[^a-zA-Z\\s]","").toLowerCase().split(" ");
        for (int i = 0; i < w.length; i++) {
            w[i].trim();
            }
        System.out.println("Word" + "\t" + "Frequency");
        System.out.println(Arrays.toString(w));

        }


    public static void main(String [] args) throws IOException{
        File temp = new File("input.txt");
        Scanner scanner = new Scanner(temp);
        CorpusTest.processCorpus(scanner);
        }
    }

我尝试添加:

String text = new Scanner( new File("input.txt") ).useDelimiter("\\A").next();

但是我得到错误,因为在上面的方法中我正在使用数组。

while循环只读取最后一行,这是不好的。

2 个答案:

答案 0 :(得分:1)

我不确定你的问题是什么,似乎你可能试图让事情变得比他们需要的更困难。为什么不简单地用Scanner读取你的行,一次一个,将它们放入StringBuilder,然后在读入文本时,转换为String并操纵你的String到你的心灵内容?

答案 1 :(得分:1)

@ user2864740帮助我将我重定向到正确的来源。我在代码的开头使用了这个而不是循环:

String content = new Scanner(new File("input.txt")).useDelimiter("\\Z").next();     
        String[] w = content.replaceAll("[^a-zA-Z\\s]","").replaceAll("\n","").toLowerCase().split(" ");

现在可行。