Без Pattern данные выводятся такие:
USD 27.827 28.161 -0.040 -0.040 28.0035 28.004 -0.046 -0.046 28.002897 28.003 -0.079 -0.079 EUR 31.932 +0.083 +0.083 32.595 +0.085 +0.085 32.3723 32.372 +0.065 +0.065 32.203332 32.203 +0.092 +0.092 RUB 0.369 -0.004 -0.004 0.432 -0.002 -0.002 0.4203 0.420 0.423110 0.423 GBP 35.809 +0.188 +0.188 37.474 +0.184 +0.184 36.9582 36.958 -0.029 -0.029 36.825692 36.826 +0.203 +0.203 CHF 27.229 +0.110 +0.110 28.693 +0.087 +0.087 28.3216 28.322 -0.004 -0.004 28.218832 28.219 +0.004 +0.004 PLN 7.058 +0.010 +0.010 7.595 -0.090 -0.090 7.4833 7.483 +0.013 +0.013 7.472464 7.472 +0.032 +0.032 JPY 0.238 0.251 +0.001 +0.001 0.2495 0.250 0.247280 0.247 -0.001 -0.001 CAD 20.055 -0.170 -0.170 21.700 21.4660 21.466 21.602825 21.603 -0.005 -0.005 AUD 19.430 -0.020 -0.020 20.160 -0.140 -0.140 19.8671 19.867 +0.099 +0.099 19.871240 19.871 +0.053 +0.053 DKK 4.100 4.350 +0.010 +0.010 4.3226 4.323 +0.006 +0.006 4.316743 4.317 +0.012 +0.012 NOK 3.280 3.430 +0.020 +0.020 3.4095 3.409 +0.005 +0.005 3.408914 3.409 +0.026 +0.026 SEK 2.970 -0.010 -0.010 3.100 3.1148 3.115 +0.047 +0.047 3.072837 3.073 -0.002 -0.002 CZK 1.190 1.293 1.2482 1.248 1.247853 1.248 +0.003 +0.003 HUF 0.091 0.103 0.0992 0.099 0.099072 0.099
А я пробую вывести только название валюты то есть (USD И ТАК ДАЛЕ) потом курс то есть (27.827 28.161 ) потом комерческий курс(28.0035) и НБУ (28.002897). USD 27.827 28.161 28.0035 28.002897 EUR.....PLN....
Никак не получается, подскажите что я не так делаю и как исправить?
private static String getOnlyKyrsi(String only) throws Exception{
Pattern pattern = Pattern.compile("([A-Z]){1,}\\s([0-9]){1,}\\.([0-9]){1,}\\s([^-+])") ;
Matcher matcher = pattern.matcher(only);
if(matcher.find()){
return matcher.group();
}
throw new Exception("Ne mogy naiti");
}
public static void main( String[] args ) throws Exception{
Document doc = (Document) Jsoup.connect("https://kurs.com.ua/gorod/1217-lvov/").get();
Element kursi = doc.select("table[class = ipsTable ipsKursTable ipsKursTable_board ipsKursTable_summary]").first();
Elements body = kursi.select("tbody[data-role= tableRows");
String body1 = kursi.select("tbody[data-role= tableRows").text();
System.out.println(body1);
for (Element body2:body){
String others = body2.select("tr[class]").text();
String kursiValut = getOnlyKyrsi(others);
System.out.println(kursiValut);
}
Зачем вам использовать regexp, когда можно все спокойно сделать средствами jsoup?
Element body = kursi.select("tbody[data-role= tableRows").get(0);
Elements allLines = body.select("tr");
for (Element line : allLines) {
String currency = line.select("td[class = ipsKursTable_currency ipsType_center]").text();
String bidPrice = line.select("td[data-rate-type=bid]").text();
//и так далее для всех нужных аттрибутов
}
Если решили именно парсить строку, то удобнее будет сделать так:
String str = "USD 27.827 28.161 -0.040 -0.040 28.0035 28.004 -0.046 -0.046 28.002897 28.003 -0.079 -0.079 EUR 31.932 +0.083 +0.083 32.595 +0.085 +0.085 32.3723 32.372 +0.065 +0.065 32.203332 32.203 +0.092 +0.092";
for (String val : str.split(" (?=[A-Z]+)")) {
String[] splitVal = val.split(" ");
// Здесь splitVal по индексу 0 будет содержать название валюты,
// а в последующих индексах значения идущие после нее.
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Для сравнения объектов в Java используется метод equals(), но что если сравниваются между собой два объекта-обертки для примитивных типов:
Нужно реализовать повтор строки в столбик 1 раз (если то условие выполняется)Ниже выделил где именно это происходит
Надо выводить какие-то действия в консоль + логировать их в файлЯ сделал это с помощью log4j