2015-11-17 3 views
1

Мне нужно извлечь некоторые данные с веб-сайта, а затем сохранить некоторые значения в переменных.Java - Split String, чтобы получить десятичное число

Здесь у вас есть код:

public class Principal { 

public static void main(String[] args) throws IOException { 

    URL url = new URL("http://www.numbeo.com/cost-of-living/country_result.jsp?country=Turkey"); 
    URLConnection yc = url.openConnection(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
    String inputLine; 
      String valor; 
      String str = null; 

    while ((inputLine = in.readLine()) != null) { 
        if(inputLine.contains("Milk")) 
        { 
         System.out.println("Encontrei! " + inputLine); 
         valor=inputLine.substring(inputLine.lastIndexOf("\"priceValue\">") + 14); 
         System.out.println("valor:" +valor); 

        } 

      } 
    in.close(); 
    } 

    } 

Первая inputline печать это: <tr class="tr_standard"><td>Milk (regular), (1 liter) </td> <td style="text-align: right" class="priceValue"> 2.45&nbsp;TL</td>

Теперь у меня есть, чтобы извлечь только "2.45", как я могу это сделать? Я уже пробовал с некоторым Regex, но не могу заставить его работать. Извините за мой английский. Спасибо заранее.

+0

Что вы ждете? –

+0

Лучшее, что у меня было, было с («\\ D +», «»); Но он удаляет точку – user3088049

+0

. Я знаю, что это не то, о чем вы просите, но похоже, что ваше приложение может принести пользу, если вы используете фактический синтаксический анализатор XML. – JockX

ответ

2

Вы можете попробовать следующее регулярное выражение:

(?:class="priceValue">\s*)(\d*\.\d+) 

Он ищет class="priceValue" строки с последующей ценой

Вот DEMO и explanation

+0

Привет, спасибо! Я пробовал вот так: 'str = valor.replaceAll (" (?: Class = \ "priceValue \"> \\ s +) ([\\ d.] +) "," "); System.out.println ("valor:" + str); ' Но печать показывает: доблесть: 2.45   TL – user3088049

+0

Вы должны использовать 'matcher' – MaxZoom

+0

вот так? 'valor.matches (" (?: class = \ "priceValue \"> \\ s +) ([\\ d.] +) ");' – user3088049

2

Я знаю, что вы просите регулярное выражение, но считаю, делая вашу жизнь проще, анализируя HTML, как если бы это был структурированный XML-документ, а не обычная строка. Есть библиотеки, которые будут обрабатывать это для вас, и не позволят вам беспокоиться о форматировании текста, правовых разломов и других вещах:

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

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

import java.io.IOException; 

public class HtmlParser { 
    public static void main(String[] args) { 

     Document doc; 
     try { 
      doc = Jsoup.connect("http://www.numbeo.com/cost-of-living/country_result.jsp?country=Turkey").get(); 
      Elements rows = doc.select("table.data_wide_table tr.tr_standard"); // CSS selector to find all table rows 
      for (Element row : rows) { 
       System.out.println("Item name: " + row.child(0).text()); // Milk will be here somewhere 
       System.out.println(" Item price by column number: " + row.child(1).text()); 
       System.out.println(" Item price by column class: " + row.getElementsByAttributeValue("class", "priceValue").get(0).text()); 
      } 

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

/** 
Output: 
Item name: Meal, Inexpensive Restaurant 
    Item price by column number: 15.00 TL 
    Item price by column class: 15.00 TL 
Item name: McMeal at McDonalds (or Equivalent Combo Meal) 
    Item price by column number: 15.00 TL 
    Item price by column class: 15.00 TL 
... 
*/