首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件读取IO

文件读取IO
EN

Stack Overflow用户
提问于 2015-12-20 20:24:13
回答 2查看 105关注 0票数 0

我最近一直在努力争取在这项任务中取得实质性进展。我需要创建一个接收文本文件的程序,并创建生成文本文件中每个单词的输出、该单词出现的次数以及整个文件中出现的百分比。现在,我的主要问题是读取文本文件的所有值。我试图使用数组列表来存储我所读到的内容。部分细节包括应该忽略逗号、句号、分号、冒号和感叹号等字符。这是全部任务:

编写一个读取普通文本文件的程序,以构造一个单词列表和每个单词发生的次数。完成后,程序到控制台的输出应该是一个有三列的表:单词found。单词在文件中出现的次数。发现的事件的比例(例如2.17%)。 这张表是按词典顺序排列的。标点符号(,.;:!)出现在单词的末尾,应该删除。大写和小写应忽略。连字符应该被看作是一个单词。 玛丽有一只小羊羔,一只小羊羔 A 1 14.29% 有1 14.29% 小2 28.57% 羔羊2 28.57% 玛丽1 14.29%

所以我要问的问题是:

  1. 如何将文本文件的文字读入数组列表,以便以所需的方式操作它们。
  2. 什么是计算数组列表中事件数量的最佳方法,以及按字典顺序排序的最佳方法。
  3. 我计划使用printf来组织输出,就像给定的例子一样,这是一个最优的解决方案吗?
  4. 对于第三列百分比,我计划打印出来(单词的出现量/除以文件中的单词总数+%%签名纯文本),这是一个最佳解决方案吗?

这是我到目前为止所拥有的,正如前面所说的,我只想把所有的单词都放到数组中,而且我目前正在使用一个文本文件和示例的文本:"àMary有一只小羊羔,小羔羊“。

代码语言:javascript
复制
public class fileInfo 
{
    public static void main(String[]args) throws FileNotFoundException
    {
        Scanner scan = new Scanner(new File("testFile.txt"));
        scan.useDelimiter(" ");
        ArrayList<String> aL = new ArrayList<String>();

        while(scan.hasNext())
        {
            if(scan.next() == "." || scan.next() == ",")
            {
                continue;
            }
            aL.add(scan.next());
        }
        scan.close();

        System.out.println(aL);
    }

    public static ArrayList<String> constructArray(ArrayList<String>temp) throws FileNotFoundException
    {

        Scanner scan = new Scanner(new File("testFile.txt"));
        temp = new ArrayList<String>();

        while(scan.hasNext())
        {
            temp.add(scan.next());
        }
        return temp;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-20 21:20:46

如何将文本文件的文字读入数组列表,以便以所需的方式操作它们。

Scanner的分隔符设置为对空格和标点符号进行拆分。分隔符是由Pattern类定义的正则表达式。你想要的模式:

代码语言:javascript
复制
"[\\s,.;:!]+"

意思是:一个或多个空格或标点符号。

什么是计算数组列表中事件数量的最佳方法,以及按字典顺序排序的最佳方法?

使用TreeMapTreeMap<String, AtomicInteger>

对于一个简单的英文文本解决方案,你可以简单的小写字母(你的例子)。

更好的实现是使用具有TreeMap强度的Collator初始化TERTIARY

FYI:您的例子是错误的,因为lamb应该列在little之前。

我计划使用printf来组织输出,就像给定的例子一样,这是一个最优的解决方案吗?

这是一种适当的方式。

对于第三列百分比,我计划打印出来(单词的出现量/除以文件中的单词总数+%%签名纯文本),这是一个最佳解决方案吗?

这是一种合适的方法,也可能是最简单的方法。只需记住乘以100,并使用double而不是int执行除法。

票数 1
EN

Stack Overflow用户

发布于 2015-12-20 21:27:16

因为这是家庭作业,我不会把文字代码,它将需要更多的时间来解释它比搜索一个解决方案的谷歌。

我将给出一些想法,所以您只需要搜索如何在Java中实现这些想法。

1)有一个动态的字符串列表,在那里你可以存储所有的单词。

2)使用BufferedReader的readLine()方法获取文件中的每一行。

3)对于每一行,将他的所有单词存储到步骤1的字符串动态列表中。

提示:您可以使用空格来知道单词何时结束/开始。

4)当您将文件中的所有单词存储在一个动态列表中时,实现一些超级高效的方法来计算需要在输出上显示的内容。提示:你可以去擦除实际的单词,所以在未来的列表中,扫描器会更短。会是这样的:

int i,j; 对于(i= 0;i< word_list.length - 1;i++){ 对于(j=i+ 1;j< word_list.length - 1;j++){ if(word_list.get(i) == word_list.get(j)){ numberOfAppearences++;word_list.erase(j);j-;//我们删除了一个元素}} }

这将只显示一个给定单词的出现次数。显然,您必须根据您的需要使用此代码。

如果您想使它更优化,而不需要将文件数据复制到RAM中,您可以逐个字符读取文件字符,直到找到第一个空白为止,这意味着第一个单词已经结束,所以您可以将这个单词存储在一个字符串中,然后继续读取字符,直到找到下一个空白空间,这将是第二个单词,现在您将比较word1和word2,做数学,并保持读字符与第三个单词,等等。这样,您只需要两个字符串,一个用于当前单词,另一个用于下一个单词。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34385450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档