2016-10-30 23 views
2

为了学习目的,我试图编写一个简单的货币转换器。我想从Google获得更新的费率。从URL内容中获取java变量的值

public void Google() throws IOException { 
    String url="https://www.google.com/finance/converter?a=1&from=USD&to=BDT"; 
    URL theUrl=new URL(url); 
    URLConnection openUrl=theUrl.openConnection(); 
    BufferedReader input = new BufferedReader(new InputStreamReader(openUrl.getInputStream())); 
    String result=null; 
    while ((result=input.readLine()) != null){ 
     System.out.println(result); 

    } 
    input.close(); 

} 

它让我的HTML源代码:

<div id=currency_converter_result>1 USD = <span class=bld>77.9284 BDT</span> 

所以我只需要率77.9284 BDT并将其存储在一个变量。

我不知道该怎么做!我需要一些正则表达式吗?

任何帮助将不胜感激!

回答

0

要有效提取DOM元素,可以使用jsoup库来解析html内容。

请使用(在类级别import org.jsoup package)下面的代码片段为您的要求:

public void google() throws IOException { 
     Document doc = Jsoup.connect("https://www.google.com/finance/converter?a=1&from=USD&to=BDT").get(); 
     Element element = doc.getElementById("currency_converter_result"); 
     String text = element.text(); 
     System.out.println(text); 
    } 
+0

这个解决方案非常接近我的需求。是否有可能只获得 kodr

+0

元素r = element.getElementsByClass(“bld”);可以使用 – kodr

+0

可以使用substring:String dollarValue = text.substring(text.indexOf ( “=”)+ 2); – developer

0

你可以使用jSoup库来解析java中的html数据然后从那里你可以得到类bdt的跨度值。

0

如果你不想使用一个库,你可以使用Pattern类,但不是一个好主意用正则表达式解析HTML/XML。看到这篇文章:Question about parsing HTML using Regex and Java

public void Google() throws IOException { 
    URL url = new URL("https://www.google.com/finance/converter?a=1&from=USD&to=BDT"); 
    URLConnection openUrl = url.openConnection(); 

    BufferedReader input = new BufferedReader(new InputStreamReader(openUrl.getInputStream())); 

    String result = null; 
    Pattern pattern = Pattern.compile("([0-9]*.?[0-9]* BDT)"); 

    while ((result = input.readLine()) != null) { 
     Matcher matcher = pattern.matcher(result); 
     if (matcher.find()) { 
      System.out.println(matcher.group()); 
      break; 
     } 
    } 
    input.close(); 
}