gpt4 book ai didi

java - 用 Java 向服务器请求表

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:56 25 4
gpt4 key购买 nike

我正在尝试向该服务器询问一张 table ,但我不确定该怎么做。基本上我试图让 Eclipse 程序在运行程序时打印出这样的东西:

<tr><td>
<pre>

<b>2011 Phases of the Moon</b>
Universal Time

New Moon First Quarter Full Moon Last Quarter

d h m d h m d h m d h m

Jan 4 9 03 Jan 12 11 31 Jan 19 21 21 Jan 26 12 57
Feb 3 2 31 Feb 11 7 18 Feb 18 8 36 Feb 24 23 26
Mar 4 20 46 Mar 12 23 45 Mar 19 18 10 Mar 26 12 07
Apr 3 14 32 Apr 11 12 05 Apr 18 2 44 Apr 25 2 47
May 3 6 51 May 10 20 33 May 17 11 09 May 24 18 52
Jun 1 21 03 Jun 9 2 11 Jun 15 20 14 Jun 23 11 48
Jul 1 8 54 Jul 8 6 29 Jul 15 6 40 Jul 23 5 02
Jul 30 18 40 Aug 6 11 08 Aug 13 18 57 Aug 21 21 54
Aug 29 3 04 Sep 4 17 39 Sep 12 9 27 Sep 20 13 39
Sep 27 11 09 Oct 4 3 15 Oct 12 2 06 Oct 20 3 30
Oct 26 19 56 Nov 2 16 38 Nov 10 20 16 Nov 18 15 09
Nov 25 6 10 Dec 2 9 52 Dec 10 14 36 Dec 18 0 48
Dec 24 18 06
</pre>
</td></tr>

这是我目前所拥有的:

import java.util.Scanner;
import java.io.*;
import java.net.*;
/**
This program shows the moon phase table for the given year
*/
public class MoonPhaseTable
{
public static void main(String[] args) throws IOException
{
Scanner in = new Scanner(System.in); //read year number from user
System.out.print("Please enter the year (e.g. 1977): ");
int year = in.nextInt();

// Build the URL string and open a URLConnection
// Be sure to set the year on the URL string!!!
URL moonphase = new URL("http://aa.usno.navy.mil/cgi-bin/aa_moonphases.pl?year=2015/");
URLConnection mp = moonphase.openConnection();

// Get the connection's input stream, and make a Scanner for it
BufferedReader r = new BufferedReader(new InputStreamReader(mp.getInputStream()));

Scanner s = new Scanner(moonphase.openStream());

String inputLine;

boolean printingTable = false;
while ((inputLine = r.readLine()) !=null) {
// Read input lines from the scanner into the String named line.

if (printingTable) {
// Check if the line contains the </table> end tag -- if seen, turn off printing
System.out.print("CONTAINS </table>");
s.close();
}
if (printingTable) {
// If inside the Table, print the line.
// Optionally clean up any unwanted tags, such as
// <pre>, <tr>, <td>, <b> before printing.
System.out.print(inputLine);

}
if (!printingTable) {
// Check if the line contains the <table ...> start tag -- if seen, turn on printing
System.out.print(inputLine);
}
}
}

}

现在,它打印了整个源代码。我只想要如上所示的代码。我知道我没有检查该行是否正确包含表格 block ,但我不确定如何执行此操作。如果有人有任何建议,将不胜感激。我想我必须向 aa.usno.navy.mil 服务器询问月球表但是又一次..我迷路了。

最佳答案

在循环中,您需要根据收集到的输入匹配计算 printingTable

像这样的东西可能适用于计算 printingTable:

printingTable = inputLine.contains("table");

这非常粗糙,但对于这种情况可能效果很好。

现在,如果 printingTabletruefalse 并且不更新 printingTable,代码将打印行从它的初始值 false 开始。

或者,有一些非常好的 Java HTML5 解析库,例如 Validator.nu HTML 解析器: https://about.validator.nu/htmlparser/

它提供了 SAX、DOM 和其他解析模式。 DOM 可能是最好的,因为您可以轻松获得表格的整个子树并用它一个一个地挑选元素。

我在工作中使用它对相当困惑的数据源进行网络挖掘,它使它更易于管理。我将请求发布我在 2011 年写的网络挖掘指南的许可。

关于java - 用 Java 向服务器请求表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com