为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅使用 Scanner 读取文件并将每个句子存储在 arrayList 中?

如何仅使用 Scanner 读取文件并将每个句子存储在 arrayList 中?

萧十郎 2021-08-25 10:05:52
我在做这件事时遇到了很多麻烦,由于这是一项任务,我无法发布我的整个代码。我已经能够成功地将每个单词存储到ArrayList作业要求的类型中,但我确实需要将每个句子存储到 一个 中ArrayList,但是这样做有很多困难。import java.util.*;import java.io.*;import java.lang.*;public class WordLookUp {    private String[] mostWords;    private String line;    private List<String> original;    private List<String> mostOccur = new ArrayList<String>();    private List<Integer> count = new ArrayList<Integer>();    private String token;    private List<String> sentences = new ArrayList<String>();    private String sToken;    private Scanner reader2;    private String[] ss;    public WordLookUp(String file) throws Exception {        try (Scanner reader = new Scanner(new File(file));){            this.original = new ArrayList<String>();            this.sToken = null;            while (reader.hasNext()) { //reads file and stores it in string                this.token = reader.next();                this.original.add(this.token); //adds it to my arrayList                findMostOccurringWords(this.token);                this.sToken = reader.nextLine(); //how can I make this read and store sentences only                this.sentences.add(this.sToken);            }        }     }}如您所见,我已经使用过,reader.nextLine()但这当然只是在文件中存储行。我通过打印来测试它:public void print() {    for (String s : this.sentences) {        System.out.println(s);    }}这证实了这一点。但是,我无法找到如何拆分ArrayList(我认为您不能)或如何简单地将每个句子放入句子的索引中ArrayList。我不能使用任何内置库,例如Collectionsor Array,我必须手动弄清楚如何将每个句子存储在ArrayList. 感谢您的帮助!
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

你的逻辑有点不对。当您阅读next()then 时nextLine(),nextLine()将不包括所阅读的内容,next()因此您每次迭代都会跳过一个单词。试试这个:


- 用useDelimiter();读到句号、感叹号或问号(句末)的方法读一行


使用 a.作为分隔符的示例:


Scanner in = new Scanner("Hello. This is a string. It has multiple senteces").useDelimiter("\\.");

while(in.hasNext()) {

  System.out.println(in.next());

}

- 将句子添加到句子中 ArrayList()


- 将句子拆分为单独的单词并将它们添加到单词中 ArrayList()




查看完整回答
反对 回复 2021-08-25
?
烙印99

TA贡献1829条经验 获得超13个赞

下次给我们更多关于你的任务的细节,这样我们就不必猜测了:)


无论如何,请使用以下结构来阅读每个句子:


Scanner sc = new Scanner(inputFile).useDelimiter("\."); 

while (sc.hasNext()) {

     // we will hold your sentence in the s variable

     Sting s = sc.next();

     // here you add the string to your sentence array

     // or better be conscious about your memory usage 

     // and do the processing right away.

     processSentence(s);

}

从您的代码片段看来,您似乎需要收集有关您的字数和最流行词的统计信息。HashMap<String, Integer>将是很好的结构。


void processSentence(String s) {

    Scanner ws = new Scanner(s).useDelimiter(" "); 

    while (ws.hasNext()) {

        Sting w = ws.next();

        // I assume you have this.wordCounters initialized as HashMap<String,Integer>();

        Integer c = this.wordCounters.get(w);

        if (c==null) { c=0; }

        c = c+1;

        this.wordCounters.put(w, c);

    }

}


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信