java - 有没有办法简化 Java 模式匹配从 POST 请求中检索两条数据?

标签 java pattern-matching matcher simplify

我是 Java 的新手,我对从 POST 请求中检索两条数据(queryKeywebEnv)需要多少代码感到震惊。有没有更简单或更优化的方法来完成我在这里所做的事情?

  String link = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi?db=nucleotide&id=" + id;
  URLConnection connection = new URL(link).openConnection();
  connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
  connection.connect();
  BufferedReader r  = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

  String webEnv = "";
  String queryKey = "";

  // Put together string to be scanned to find patterns
  StringBuilder sb = new StringBuilder();
  String line;
  while ((line = r.readLine()) != null) {
    sb.append(line);
  }
  String result = sb.toString();

  // Specify patterns to search for
  String queryKeyRegEx = "<QueryKey>(\\d+)<\\/QueryKey>";
  String webEnvRegEx = "<WebEnv>(\\S+)<\\/WebEnv>";

  // Create Pattern objects
  Pattern queryKeyPattern = Pattern.compile(queryKeyRegEx);
  Pattern webEnvPattern = Pattern.compile(webEnvRegEx);

  // Create Matcher objects
  Matcher queryKeyMatcher = queryKeyPattern.matcher(result);
  if (queryKeyMatcher.find()) {
    queryKey = queryKeyMatcher.group(1);
    System.out.println(queryKey);
  }
  Matcher webEnvMatcher = webEnvPattern.matcher(result);
  if (webEnvMatcher.find()) {
    webEnv = webEnvMatcher.group(1);
    System.out.println(webEnv);
  }

最佳答案

检查一下:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilderFactory;
import java.net.URL;


public class Try {

    private static Document loadTestDocument(String url) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        return factory.newDocumentBuilder().parse(new URL(url).openStream());
    }

    public static void main(String[] args) throws Exception {
        Document doc = loadTestDocument("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi?db=nucleotide&id=1");
        NodeList nodeList = doc.getElementsByTagName("ePostResult");
        Element element = (Element) nodeList.item(0);
        String webEnv = element.getElementsByTagName("WebEnv").item(0).getTextContent();
        String queryKey = element.getElementsByTagName("QueryKey").item(0).getTextContent();
        System.out.println(webEnv);
        System.out.println(queryKey);
    }
}

关于java - 有没有办法简化 Java 模式匹配从 POST 请求中检索两条数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655781/

相关文章:

Java 类在 Eclipse 中看不到自身?

Java UUID 压缩和解压缩

java - HttpExchange 发送文件

java - 为什么我在这里收到 InvalidUseOfMatchers 构建错误?

ScalaTest - 编写自定义匹配器

java - ArrayList的对象消失

Scala - Spark sql 结构上的行模式匹配

Java,从文件中进行模式匹配和排序

java模式匹配正则表达式

pattern-matching - racket:模式匹配函数参数