leetcode
leetcode 151 ~ 200
第十行

第十行

难度:

标签:

题目描述

给定一个文本文件 file.txt,请只打印这个文件中的第十行。

示例:

假设 file.txt 有如下内容:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

你的脚本应当显示第十行:

Line 10

说明:
1. 如果文件少于十行,你应当输出什么?
2. 至少有三种不同的解法,请尝试尽可能多的方法来解题。

代码结果

运行时间: 8 ms, 内存: 3.5 MB


/*
 * 思路:
 * 1. 使用Files.lines方法读取文件并将其转为Stream。
 * 2. 使用Stream的skip方法跳过前9行。
 * 3. 使用findFirst获取第10行。
 * 4. 如果文件少于10行,则输出一条提示信息。
 */
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
 
public class SolutionStream {
    public static void main(String[] args) {
        String fileName = "file.txt";
        try (Stream<String> lines = Files.lines(Paths.get(fileName))) {
            lines.skip(9).findFirst().ifPresentOrElse(System.out::println, () -> System.out.println("The file has less than 10 lines."));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

解释

方法:

这个解法使用 sed 命令直接打印文件的第 10 行。sed 是一个流编辑器,可以对文本进行过滤和转换。-n 参数表示不自动打印,10p 表示打印第 10 行。

时间复杂度:

O(n)

空间复杂度:

O(1)

代码细节讲解

🦆
解析第十行的具体命令`sed -n 10p file.txt`中,`-n`参数和`10p`具体有什么作用?
`-n`参数在sed命令中用于禁止自动打印,这意味着sed默认的行为是处理输入并将其打印到标准输出,但当使用`-n`时,只有明确指定的行会被打印。`10p`则是一个命令组合,其中`10`指定了行号,`p`是打印指令,用于打印当前模式空间的内容,即在这里特指第10行。总结来说,`-n`避免了所有行被默认打印,而`10p`指定只打印第10行的内容。
🦆
在文件行数少于10行时,使用`sed -n 10p file.txt`命令会有什么输出?
如果文件行数少于10行,使用`sed -n 10p file.txt`命令将不会有任何输出。因为`sed`尝试打印第10行,但是由于它不存在,没有任何内容可以被打印。
🦆
题解提到至少有三种不同的解法,能否简要说明除了使用sed外,还可以使用哪些其他工具或方法来解决这个问题?
除了使用sed,还有其他几种方法可以用来打印文件的第10行: 1. **awk**: 使用`awk 'NR == 10' file.txt`可以达到相同的效果。在这里,`NR`是awk内置的记录号变量,当`NR`等于10时,该行将被打印。 2. **head和tail组合**: 首先使用`head -10 file.txt`取前10行,然后用`tail -1`从这些行中取最后一行,即第10行。完整命令是`head -10 file.txt | tail -1`。 3. **Python脚本**: 可以编写一个简单的Python脚本来读取并打印文件的第10行。例如: python with open('file.txt', 'r') as file: lines = file.readlines() if len(lines) >= 10: print(lines[9]) # 因为Python的索引从0开始

相关问题