#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); ArrayListmatches = 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
"; ArrayListtexts = 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); } }
Комментариев нет:
Отправить комментарий