You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何读取字符直至指定字符(如空格)?

解决内存受限场景下的文件单词读取问题

问题背景

我在开发外部排序应用时碰到了内存限制的难题:需要从文件里读取指定数量的单词,但没法直接用readLine()再split()的方式——这种做法会一次性把整行内容加载到内存里,不符合精确控制内存的要求。最开始我打算用逐字符读取的思路,碰到空格就停止,把读取到的单词存入数组后再继续读下一个,但不清楚怎么把read()返回的int类型转为char,也不知道该怎么判断空格来终止单次单词的读取。

我最初写的代码是这样的:

protected static String [] readWords(String arqName, int amountOfWords) throws IOException { 
    FileReader arq = new FileReader(arqName); 
    BufferedReader lerArq = new BufferedReader(arq); 
    String[] words = new String[amountOfWords]; 
    for (int i = 0; i < amountOfWords; i++){ 
        //words[i] = lerArq.read(); 
    } 
    return words; 
}

解决方法

后来我改用了Scanner的next()方法,顺利解决了问题!next()方法会自动把空白字符(包括空格、换行符等)作为分隔符,每次只读取一个单词,而且不会一次性加载大量内容到内存,刚好适配内存受限的场景。

修改后的代码如下:

static String [] readWords(int amountOfWords, Scanner leitor) throws IOException { 
    String[] words= new String[amountOfWords]; 
    for (int i = 0; i < amountOfWords; i++){ 
        words[i] = leitor.next(); 
    } 
    return words; 
}

其中Scanner的初始化是在Main方法中完成的,这样还能复用Scanner实例,进一步优化内存的使用效率。

内容的提问来源于stack exchange,提问作者marianod323

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:05:25