📜  不要在基于标记的输入之后使用基于行的输入. - Java (1)

📅  最后修改于: 2023-12-03 15:06:13.311000             🧑  作者: Mango

不要在基于标记的输入之后使用基于行的输入 - Java

当我们在处理使用标记的文本格式时,我们常常使用基于标记的输入。这种输入方式可以识别文本中的标记,并将其转换为对应的HTML标签。例如,我们可以将Markdown文本转换为HTML文档,代码如下:

import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

public class App {
    public static void main(String[] args) {
        String markdownText = "# Hello World";
        Parser parser = Parser.builder().build();
        HtmlRenderer renderer = HtmlRenderer.builder().build();
        String htmlText = renderer.render(parser.parse(markdownText));
        System.out.println(htmlText);
    }
}

在这个例子中,我们使用了org.commonmark包里的类库,将标记语言转换为HTML格式。

然而,在使用基于标记的输入之后,我们应该避免使用基于行的输入。因为在基于标记的输入中,输入的文本已经被处理成标记,每个标记都对应一个段落、一个标题、一段代码等等。如果我们再次使用基于行的输入,就会导致这些标记被打破,从而导致输出的结果不符合预期。

下面的代码展示了一个不推荐的做法,我们将使用基于行的输入读取已经被转换为HTML格式的文本,这样会破坏HTML标签,导致最终的输出结果出错:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;

public class App {
    public static void main(String[] args) throws IOException {
        String htmlText = "<h1>Hello World</h1>";
        BufferedReader reader = new BufferedReader(new StringReader(htmlText));
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            line = reader.readLine();
        }
    }
}

在这个例子中,我们使用java.io包里的BufferedReader类读取HTML文本,然后将其逐行输出。但是,由于HTML标签被打破,输出的结果并不符合预期。

因此,我们应该在处理基于标记的输入时,尽量避免使用基于行的输入。如果必须使用基于行的输入,我们应该使用没有经过标记化处理的原始文本,并且需要自己处理文本中的换行符和制表符等特殊字符。