当前位置: 首页 > 知识库问答 >
问题:

使用ArrayList查找并报告文件中最长单词出现的所有行号

戚京
2023-03-14

该程序提供输入命令行参数,这些参数是文本文件的名称,并返回基本统计信息,如字符数、单词数和行数、平均字长、每个字母的数量和字长。

我有一切工作,除了这个:查找和报告使用数组列表跟踪行号文件中最长的单词出现的所有行号,因为我们不知道最长的单词有多少次出现。如果有两个或两个以上长度相同的单词,那么只跟踪第一个。我该怎么做呢?

  try {
    fileName = file.getName();
    Scanner fileScan = new Scanner(file);

    while (fileScan.hasNextLine()) { // Scan each line of the file
      lineNumber++;

      String line = fileScan.nextLine();

      // Count the number of occurrences of each alphabet(convert all to lower-case)
      for (int i = 0; i < line.length(); i++) {
        current = line.toLowerCase().charAt(i);

        if (current >= 'a' && current <= 'z') {
          letterCount[current - 'a'] ++; // 
        }

      }
      charCount += line.length();

      Scanner lineScan = new Scanner(line);
      lineScan.useDelimiter(DELIMITERS);
      while (lineScan.hasNext()) { // Scan each line into words using custom delimiters
        word = lineScan.next();
        wordCount++;

        // Find the no. of words of each length
        for (int i = 1; i <= MAX_WORD_LENGTH; i++) {
          if (word.length() == i) {
            wordLengthCount[i] ++;
          }
        }

      }


      lineScan.close();
    }

    // Find the average word length 
    for (int i = 1; i <= MAX_WORD_LENGTH; i++) {
      totalWordLength += (i * wordLengthCount[i]);
    }
    averageWordLength = (double) totalWordLength / wordCount;

    fileScan.close();
  } catch (FileNotFoundException e) {
    System.err.println("Invalid file path: " + file.getName());
  }

共有1个答案

段干华晖
2023-03-14

因为这是一个家庭作业,所以我们只需要看看一些方法和可能的API用法的部分解决方案:

在这里,行的方法是将最长的字保留到当前处理的行。如果找到较长的单词,请清除列表。

    Path path = Paths.get("/home/...");

    int longestWordLength = 0;
    List<Integer> linesWithLongestWord = new ArrayList<>();

    int lineno = 0;
    List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
    for (String line : lines) {
        ++lineno; // 1-based line numbers
        String[] words = line.split("\\P{L}+");
        int longest = Stream.of(words)
                .mapToInt(String::length)
                .max().orElse(0);
        if (longest > longestWordLength) {
            linesWithLongestWord.clear();
            longestWordLength = longest;             
            linesWithLongestWord.add(lineno);
        } else if (longest == longestWordLength) {
            linesWithLongestWord.add(lineno);
        }
    }        
    System.out.printf("Max %d, %s%n", longestWordLength, linesWithLongestWord);

单词通过使用String.split(regular_expression)派生,其中\P{L}是非字母(大写P=non)。

为了方便起见,我在单词上添加了一个java 8流来获取最大长度。您可能希望在循环之外的局部变量中使用最大词。这里“最长的单词”被简化为一个长度。

循环之后,你可以知道什么是最大的单词等等。

 类似资料:
  • 你好,我需要找到文件中最长的单词出现的行号。如果有两个或两个以上长度相同的单词,那么只跟踪第一个。我已经跟踪了最长的单词,但我需要帮助找出最长的单词在哪里。这是我找到最长单词的代码:

  • 问题内容: 我正在尝试查找文件中出现的单词数。我有一个文本文件(),文件内容如下: 我期望的结果是: 我使用的代码是: 我得到的结果是: 谁能帮帮我吗?提前致谢 。 问题答案: 使用计数器的方法。例: 输出:

  • 我必须使用Streams API从给定文件中查找所有最长的单词。我只做了几步,但寻找一些“一行”,实际上我处理整个文件两次,第一次是找到单词的最大长度,第二次是比较所有单词和最大长度,假设它不是性能最好的;有人能帮我吗?看看代码: 我想澄清一下: 文件每行只包含一个单词,无论如何这并不重要——问题是关于正确的流代码。

  • 我有一些预定义的单词,我想在句子中找到这些单词,并添加一个SPAN标签。 例如 Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一位不知名的印刷商拿起一个打印工具,将其拼凑成一本打印样本书。 在这句话中,我想在单词中添加一个标签: 话: 行业标准 将是这样的 代码:

  • 问题内容: 我正在创建其中一种方法为的类的过程。 之后砰我的头到键盘的时间,我终于发现,我是谁继承了这个特定的数据库先前编码拼写的单词“ 权限 ”为“ privelages 在数百个文件在MySQL数据库”,因而也处处访问这些“ 特权 ”就是这样拼写的。 是否有Linux操作系统(的方式 Ubuntu的服务器 ),我可以去通过每一个地方的文件夹,并替换“ privelages 用”,“ 特权 ”,

  • 问题内容: 如何递归地查找字符串中最长的单词? 编辑 说完了,谢谢大家。这是修改后的代码。 问题答案: 首先,让我们假设句子字符串参数没有任何前导或尾随空格。您可以通过调用trim()来处理递归情况。 然后,我们需要定义两种情况,即基本情况和递归情况。 基本情况是找不到空格,即传入的句子只是一个单词。在这种情况下,只需返回句子即可。 在递归的情况下,我们将得到第一个单词,其余的则与您一样。在句子的