Java - 在sufix和前缀中间提取String

时间:2018-02-23 08:41:42

标签: java regex string split

在下面的场景中,我们有String来自任何页面的原始HTML(它可以更大),我们必须找到一些值({{1} }没有任何HTMLId

在带有html代码的大clases中,我们必须提取一些值并将它们保存在变量上,在此示例中为总信用值(60)。

String

提取该值的最佳方法是什么?。

我所做的是识别一个唯一的String response = "... <BR> <FONT COLOR="NAVY" FACE="ARIAL" SIZE="2"> <B>TOTAL CREDITS:</B>&NBSP; 60 </FONT> <BR> ..." ,我在那时剪切了字符串,然后我剪切了prefix

sufix

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

有一些特定的API用于解析java中的HTML文件。

此链接可以是一个很好的起点https://www.mkyong.com/java/jsoup-html-parser-hello-world-examples/

如果您正在使用maven,则必须包含依赖项

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.10.2</version>
</dependency>

然后,您可以使用此代码作为起点,如您所见,使用jsoup将文档DOM加载为文档,然后您可以使用与解析xml文件类似的方法搜索dom元素:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

Document doc;
try {

    // need http protocol
    doc = Jsoup.connect("http://google.com").get();

    // get page title
    String title = doc.title();
    System.out.println("title : " + title);

    // get all links
    Elements links = doc.select("a[href]");
    for (Element link : links) {

        // get the value from href attribute
        System.out.println("\nlink : " + link.attr("href"));
        System.out.println("text : " + link.text());

    }

} catch (IOException e) {
    e.printStackTrace();
}

希望这有帮助

答案 1 :(得分:1)

重申评论中的内容:不使用正则表达式解析HTML

但是,要回答您是否有更好的方法来处理某些常规字符串的直接问题:是的,只需使用func generateQRCode(from string: String) -> UIImage? { let data = string.data(using: String.Encoding.ascii) if let filter = CIFilter(name: "CIQRCodeGenerator") { filter.setValue(data, forKey: "inputMessage") let transform = CGAffineTransform(scaleX: 3, y: 3) if let output = filter.outputImage?.transformed(by: transform) { return UIImage(ciImage: output) } } return nil }

您现在正在做的一个问题是您创建了许多额外的字符串和数组,您会立即丢弃它们。所以,你也可以不创造它们。另一个问题是String.indexOf将正则表达式作为参数,因此您需要注意前缀和后缀不包含特殊字符(除非您实际上想要那些特殊字符);你可以简单地引用它们,使用String.split来避免这个问题。

此:

Pattern.quote

将字符串的一部分放在前缀之后,并在后缀之前。

你可以找到这样的前缀:

String value = response.split("TOTAL CREDITS:</B>&NBSP;")[1].split("</FONT>")[0].trim();

(您需要考虑int endOfPrefix = response.indexOf(prefix) + prefix.length(); 不在字符串中的情况)

和后缀的开头如下:

prefix

(您需要考虑字符串中int startOfSuffix = response.indexOf(suffix, endOfPrefix); 不存在的情况)。 suffix参数可能没有必要;这只是确保在前缀出现之前没有找到后缀的出现。

然后只需要它们之间的子串:

endOfPrefix