如何让 Scanner 读取多行? [关闭]

Posted

技术标签:

【中文标题】如何让 Scanner 读取多行? [关闭]【英文标题】:How to make Scanner read more than one line? [closed] 【发布时间】:2014-03-20 02:56:36 【问题描述】:

我有一个文本语料库,我必须对其进行阅读、拆分、排序和执行其他操作。 一开始,当我拆分它时,我看到 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循环只读取最后一行,不好。

【问题讨论】:

您的代码太碎片化,无法理解您的真正问题是什么。除了建议您“使用调试器”之外,我们无话可说。 相关:***.com/questions/3402735/… @StephenC 我更新了我的问题以澄清问题。 @user2864740 谢谢,这绝对是相关的,它对我有用。 【参考方案1】:

我不确定您的问题是什么,而且您似乎试图让事情变得比实际需要的更困难。为什么不简单地用扫描器读入你的行,一次一个,将它们放入一个 StringBuilder 中,然后在读入文本后,转换为一个字符串并根据你的心意来操作你的字符串?

【讨论】:

我有太多行要阅读 - 这是一个很大的文本。 (除非我不明白你的意思) @nanachan:然后根据需要读取尽可能多的行。您可以完全控制您的代码以及 Scanner 读取的行数。我强烈怀疑您的问题出在其他地方,这确实是变相的 XY 问题。 那么如果我有 10000 行,我该怎么做呢? while 循环似乎不起作用。 @nanachan:那么你需要做一些调试,首先找到问题的根源。同样,我怀疑您遇到了 XY 问题,您真正的问题与您发布的问题无关。 您有什么理由专门使用扫描仪吗?如果您只需要标记文本,为什么不使用字符串标记器?如果您想阅读文本,为什么不使用缓冲阅读器?似乎您正试图使用​​一个变量来做所有事情。【参考方案2】:

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

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

现在可以了。

【讨论】:

以上是关于如何让 Scanner 读取多行? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Scanner的基本用法

Scanner的基本用法

空扫行后Java Scanner停止读取[关闭]

将int的多行文件存储到数组中

如何在 SQL Server CE 数据库中插入多行? [关闭]

Mnesia:如何同时锁定多行,以便我可以写入/读取一组“一致”的记录