0

我正在尝试筛选一个 html 页面,以便从中提取所需的有价值的数据并将其提取到文本文件中。到目前为止一切顺利,直到我在 html 页面中遇到了这个:

<td> <b>In inventory</b>: 0.3 &#107;&#103;<br /><b>Equipped</b>: -4.5&#160;kg

页面的 html 代码中的上述行通常会有所不同。所以它需要想出一种方法来扫描线(不管它包含什么)的重量(在这种情况下是0.3-4.5)并将这些数据存储到两个单独的双精度中:

库存重量 = 0.3
装备重量 = -4.5

我希望使用纯 java 来完成;如果需要,请随时通知我任何可以在我的 java 应用程序中执行的第三方程序来实现这一点(但如果是,请生动地解释)。

谢谢一堆!

4

2 回答 2

1

RegEx通常是抓取文本的好方法。括号表示“捕获组”,它们被存储,然后可以使用 Matcher.group() 访问。[-.\d]+ 匹配由一个或多个数字 (0-9)、句点和连字符组成的任何内容。.* 匹配任何内容(但有时不匹配换行符)。在这里,它基本上只是用来“扔掉”你不关心的一切。

import java.util.regex.*;

public class Foo {
    public static void main(String[] args) {
        String regex = ".*inventory<\\/b>: ([-.\\d]+).*Equipped<\\/b>: ([-.\\d]+).*";
        String text = "<td> <b>In inventory</b>: 0.3 &#107;&#103;<br /><b>Equipped</b>: -4.5&#160;kg";

        // Look for a match
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        // Get the matched text
        if (matcher.matches()) {
            String inventoryWeight = matcher.group(1);
            String equippedWeight = matcher.group(2);

            System.out.println("Inventory weight: " + inventoryWeight);
            System.out.println("Equipped weight: " + equippedWeight);
        } else {
            System.out.println("No match!");
        }
    }
}
于 2012-07-29T19:31:35.120 回答
0

你有这段 html 作为字符串吗?如果是这样,只需搜索<b>Equipped</b>. 然后得到<b>Equipped</b>结束字符位置加一。然后通过逐个字符附加字符来构建新字符串,直到它不是数字或点。

当您在字符串变量中有这些数字时,您只需使用它们将它们转换为双精度数double aDouble = Double.parseDouble(aString)

于 2012-07-29T19:30:03.053 回答