2015-04-19 3 views
0

Я сделал этот простой код для извлечения идентификатора некоторых игроков ... но, не нужен весь вывод мне нужна последние 4 цифр, это мой кодВыкрутить цифры от выходного jsoup

import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

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


public class ListLinks { 

     public static void main(String args[]) throws IOException { 
      Document doc; 
      try { 
       doc = Jsoup.connect("http://sports.yahoo.com/mlb/teams/bal/roster/").get(); 

       Elements urls = doc.select("a[data-pid]"); 
       for (Element url : urls) { 


        System.out.println(url.attr("data-pid")); 

       } 
      } catch (IOException ex) { 
       Logger.getLogger(ListLinks.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 

И это выходной сигнал

mlb.p.8117 
mlb.p.9699 
etc... 

Так что мне нужно, чтобы удалить первые 6 цифр из выходных .. скажите, пожалуйста, как ... Это мой первый раз программирования!

Спасибо заранее!

+0

Класс элемента JSoup имеет метод с именем id(), который возвращает идентификатор элемента: http://jsoup.org/apidocs/org/jsoup/nodes/Element.html # id() – dehlen

ответ

0

Так что мне нужно, чтобы удалить первые 6 цифр из выходных ..

Я предполагаю, что вы на самом деле цифры означают характер. Во всяком случае, так как вы уже знаете, сколько символов вы хотите удалить из начала вы можете использовать substring метод и передать индекс символа, из которого новая строка может быть создана как

System.out.println(url.attr("data-pid").substring(6)); 

Но этот ответ основан на предположении, что вы знаете, индекс символа, из которого вы хотите подстроить. Если вы хотите сделать ваш код немного безопаснее и всегда удалить любые символы, которые помещены позапрошлым . вы можете использовать что-то вроде

System.out.println(url.attr("data-pid").replaceAll(".*[.]","")); 

Вы также можете использовать другие методы, как те, которые показаны в @VoodooCoderanswer

+0

Это небезопасно, потому что, если поставщик изменяет строку данных pid одного символа, ему необходимо обязательно изменить код. Но он работает: D –

+0

@ VoodooCoder "* если поставщик изменяет строку данных pid одного символа, ему необходимо изменить код. *" Это проблема любого используемого нами подхода. Провайдер может изменять данные таким образом, чтобы он выглядел как 'mlb.p.81.17', что мешает нам использовать' split ("[.]") 'Или' mlb.p.8117.321', что мешает нам использовать 'lastIndexOf ("") '. Здесь нет 100% правильного решения. – Pshemo

+0

Конечно, вы правы, но я не хочу менять код каждый раз, когда поставщик изменяет строку таким образом: 'mlb.p.8117' ->' mXXlb.p.8117' или 'mlb.p.8117' -> 'mlb.pXX.8117' –

1

Вы можете решить эту проблему по-разному:

String pid = url.attr("data-pid"); 

- Нарезка строку, а также извлечения последней группы символов (второй в этом случае, потому что это звезда ц от 0):

String result = pid.split("\\.")[2]; 

ПОЛЕЗНЫЕ когда вам нужно хранить или делать что-то с другими группами.
Вы должны быть уверены, что строка содержит точечный символ

- Searching последней позиции совпадения точек символа и подстрок из своего индекса до конца строки:

String result = pid.substring(pid.lastIndexOf(".")+1); 

полезно, если вам нужна только последняя группа символов.
Вы должны быть уверены, что строка содержит символ точка

- Использование регулярных выражений:

Pattern p = Pattern.compile("-?\\d+"); 
Matcher m = p.matcher(pid); 
String result = null; 
while (m.find()) { 
    result = m.group(); 
} 

Самый безопасный способ, с моей точки зрения.

 Смежные вопросы

  • Нет связанных вопросов^_^