Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Парсинг текста HTML Java

#java #html #парсер


Есть текст: 

текст1

текст2


текст3


и так далее.. Нужно составить список, каждый элемент которого - строка, находящаяся между тэгами с изображениями, то есть 1 строка - текст1 + текст2, вторая строка - текст3. Не хотелось бы делать это в ручную, а как это сделать с помощью парсеров или регулярок я пока не догадался


Ответы

Ответ 1



Воспользуйся библиотекой Jsoup Document doc = Jsoup.parse(new File("files/file.html"), "UTF-8"); for(Element element : doc.getAllElements()) { if(element.tagName().equals("p")) System.out.print(element.text() + " "); else if(element.tagName().equals("img")) System.out.println(); } Вывод текст1 текст2 текст3

Ответ 2



Можно воспользоваться библиотекой Jsoup, например: import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; class HtmlParsingDemo { public static void main(String[] args) { String html = "

текст1

текст2


текст3
"; Document doc = Jsoup.parse(html); Elements paragraphs = doc.select("p"); for(Element paragraph : paragraphs) { System.out.println(paragraph.text()); } } } А можно и регулярным выражение import java.util.regex.*; import java.util.ArrayList; public class RegexDemo { public static void main(String[] args) { String html = "

текст1

текст2


текст3
"; Pattern p = Pattern.compile(">([^<]*)<"); Matcher m = p.matcher(html); ArrayList matches = new ArrayList<>(); while(m.find()) { String text = m.group(1); if(!text.isEmpty()) matches.add(text); } for(String match : matches) { System.out.println(match); } } } UPDATE: import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.ArrayList; class HtmlParsingDemo { public static void main(String[] args) { String html = "

текст1

текст2


текст3
"; ArrayList texts = new ArrayList<>(); Document doc = Jsoup.parse(html); Elements elements = doc.select("p, img"); ArrayList text = new ArrayList<>(); for(Element element : elements) { if(element.tagName().equals("p")) text.add(element.text()); else { texts.add(String.join(" ", text)); text.clear(); } } texts.stream().forEach(System.out::println); } }

Комментариев нет:

Отправить комментарий