如何让 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 读取多行? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章