在 Java 中从字符串的两行之间读取

问题描述

我有一个文本行流,我必须从这个字符串中读取一个范围。

例如,给定的字符串:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="p1">hello show and hide</p>
<!--added hide/show class-->
<button type="button" class='hide'>hide</button>
<button type="button" class='show'>show</button>

而且我必须在范围之间读取,即从第 4 行到第 6 行。

怎么做?

看起来我可以使用 java 8 文本流。

str = "1 ddsfsdfs
d
6 s4. 3t
sdfdsfsfsf
dfdsfsfdfsdfd
345345
dsfsdf45v";

但不太了解 API。欢迎任何指点

解决方法

Lines API 已在 Java 11 中添加。如果您运行的是 Java 11,则对于输入字符串:

var str = "1 ddsfsdfs\n" +
            "    d\n" +
            "    6 s4. 3t\n" +
            "            sdfdsfsfsf\n" +
            "    dfdsfsfdfsdfd\n" +
            "    345345\n" +
            "    dsfsdf45v";

你可以这样做:

String line4To6 = str.lines().skip(4).limit(6 - 4).collect(Collectors.joining(","));

这将产生以下输出:

dfdsfsfdfsdfd,345345

基本上,从字符串中读取特定行的公式是:

str.lines().skip(fromLineNumber).limit(toLineNumber - fromLineNumber).collect(Collectors.joining(","));

从给定索引中读取行,不包括起始索引处的行。

如果您运行的是低于 11 但高于 8 的任何 Java 版本,则可以通过将输入字符串按如下所示的换行符拆分来创建 StreamString 来实现相同的目的:

String line4To6 = Arrays.stream(str.split("\\n")).skip(4).limit(6 - 4).collect(Collectors.joining(","));