Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何逐字而不是逐行读取大文件?_Java - Fatal编程技术网

Java-如何逐字而不是逐行读取大文件?

Java-如何逐字而不是逐行读取大文件?,java,Java,我想阅读Java中的“text8”语料库,并重新格式化一些单词。问题是,在这个100MB的语料库中,所有单词都在一行上。因此,如果我尝试使用BufferedReader和readLine加载它,它会一次占用太多空间,并且无法处理它以将所有单词分离到一个列表/数组中 所以我的问题是:在Java中,有没有可能不逐行阅读语料库,而是逐字阅读?例如,因为所有单词都在一行上,所以每次迭代读取100个单词?我建议您使用带有文件阅读器的“字符流” 下面是来自的示例代码 它读取16位Unicode字符。这样的话

我想阅读Java中的“text8”语料库,并重新格式化一些单词。问题是,在这个100MB的语料库中,所有单词都在一行上。因此,如果我尝试使用
BufferedReader
readLine
加载它,它会一次占用太多空间,并且无法处理它以将所有单词分离到一个列表/数组中


所以我的问题是:在Java中,有没有可能不逐行阅读语料库,而是逐字阅读?例如,因为所有单词都在一行上,所以每次迭代读取100个单词?

我建议您使用带有
文件阅读器的“字符流”

下面是来自的示例代码

它读取16位Unicode字符。这样的话,你的文章是否在一整行中并不重要


由于您正在尝试逐字搜索,因此您可以轻松阅读,直到您偶然发现一个空格并找到您的单词。

您可以尝试使用
扫描仪
并将分隔符设置为适合您的值:

Scanner input=new Scanner(myFile);
input.useDelimiter(" +"); //delimitor is one or more spaces

while(input.hasNext()){
  System.out.println(input.next());
}

使用
java.util.Scanner的
next
方法

next
方法查找并返回来自此扫描仪的下一个完整令牌。A. 完整标记的前面和后面是与 分隔符模式。此方法在等待输入时可能会阻塞 扫描,即使先前调用Scanner.hasNext返回true

例如:

public static void main(String[] args) {
        Scanner sc = new Scanner (System.in); 
        String a = sc.next();
        String b = sc.next();
        System.out.println("First Word: "+a);
        System.out.println("Second Word: "+b);
        sc.close();
    }
输入:

你好,Stackoverflow

输出:

第一个字:你好

第二个词:Stackoverflow


在您的情况下,使用
Scanner
读取文件,然后使用
scannerobject.next()
方法读取每个标记(单词)

您是否尝试过
Scanner
类?使用
RandomAccessFile
读取大量文件。
public static void main(String[] args) {
        Scanner sc = new Scanner (System.in); 
        String a = sc.next();
        String b = sc.next();
        System.out.println("First Word: "+a);
        System.out.println("Second Word: "+b);
        sc.close();
    }
    try(FileInputStream fis = new FileInputStream("Example.docx")) { 
        ZipSecureFile.setMinInflateRatio(0.009);
        XWPFDocument file   = new XWPFDocument(OPCPackage.open(fis));  
        ext = new XWPFWordExtractor(file);  
        Scanner scanner = new Scanner(ext.getText());
        while(scanner.hasNextLine()) {
            String[] value = scanner.nextLine().split(" ");
            for(String v:value) {
                System.out.println(v);
            }
        }
    }catch(Exception e) {  
        System.out.println(e);  
    }