我有一个文本语料库,我必须阅读,分割,排序和执行其他操作。 在一开始,当我拆分它时,我看到扫描仪只读取一行。这是代码:
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循环只读取最后一行,这是不好的。
答案 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(" ");
现在可行。