0

我需要从<title> </title>标签之间提取网页的标题。

还需要显示位于<body...>and</body>标记之间的所有文本,但在正文之外不显示任何内容。

我不希望返回任何尖括号或任何 html 数据。

4

5 回答 5

8

你可以使用类似的东西:

String html = "<html>My page</html>";
String title = html.substring(html.indexOf("<html>") + 6, html.indexOf("</html"));
System.out.println(title);

String.indexOf(string)方法返回给定字符串(变量 html)中字符串(在示例中为"<html>"和)的起始索引。"</html>"

String.substring(int, int)方法返回两个索引之间的字符串。

有了这个,你可以启动你的浏览器。

于 2013-02-25T22:47:37.327 回答
1

为了简化我的问题,我如何搜索一个巨大的字符串来找到另一个字符串并记录它的位置?

String#indexOf(String)例如:

int index = bigString.indexOf("<body");

...找到 in 的第一次<body出现bigString并返回其索引(您可以与 一起使用substring)。但是,如果您不确定如何执行此操作,那么这项任务就是疯了。本课程应该已经为您做好了完成这项任务的准备,但似乎还没有。

解析 HTML 很复杂indexOf您可以使用and完成一个半完整的不正确的工作substring,但它会是......半完整的和不正确的。

于 2013-02-25T22:44:58.370 回答
1

有很多方法可以解决这个问题,但是使用您提出的约束让我们采用低级别的方法。首先假设您已将整个 HTML 文档接收到一个名为html. 第一个任务是搜索''。有很多错误检查这个答案不会涵盖,但是我们不能为你做所有的功课:P,所以我们假设title元素是小写的并且格式正确:

首先,我们需要确定 HTML 中的哪个位置是 title 元素(我在这里使用indexOf()

int start = html.indexOf("<title>")+"<title>".length();
int end = html.indexOf("</title>", start);

然后将其提取到字符串中(使用substring()):

String title = html.substring(start, end);
于 2013-02-25T22:50:41.427 回答
0

根据您的描述,您不需要解析完整的 HTML 文档,而只需从中提取一些信息。基于有限状态机的方法将起作用。

扫描直到找到一个<title>元素。从那时起,任何东西都是数据,直到你找到一个结束</title>。然后扫描,直到找到一个开口<body>。从那时起,您将需要阅读“内容”,跳过<和之间的任何内容>,可以按如下方式完成:

//input stream in is just after <body>
String body=""; 
String element="";
boolean ignore=false
while (true) {
  char c = in.read();
  if (c<0) break; //end of stream
  if (ignore) {
    if (c=='>') {
      if (element.equals("/body")) break; //closing </body>
      ignore=false;
    }
    else element+=c;
  }  else {
    //not in ignore mode
    if (c=='<') {element=""; ignore=true;}
    else body+=c;
  }
于 2013-02-25T22:38:26.683 回答
0

程序员使用两个开发阶段来解决这类问题:

1.自己解析数据:

在 HTML(良好的 HTML)中,大多数标签后面都有结束标签。<title>标签就是其中之一。如果您要查找它们之间的内容,请查找 的索引<title>。您可能想要最后一个索引>只是为了方便。

然后当当前字符不是<时,将该字符添加到字符串中。

当你击中 a<时,你应该检查它是否是</title>。如果没有,请继续阅读。基本上你一直在循环。每次您点击<检查它是否是结束标题标签。

当您意识到这非常困难并重新发明轮子时,请前进到第 2 步:

2. 使用 DOM 解析器库。

在您尝试执行第 1 步时伤害了自己。您会发现为什么程序员强烈建议您永远不要解析 HTML 或在 HTML 上使用正则表达式。意识到使用久经考验的 HTML 解析器已经打赢了这场战斗:领先的 Java HTML 解析器的优缺点是什么?

于 2013-02-25T22:40:30.547 回答