Я пишу API, который отображает текст, символ за символом. Я думал, что простым решением для стилизации этого текста было бы добавить разбор HTML. Например, я могу использовать HTML, чтобы добавить жирный тэг к тексту, а затем использовать синтаксический анализ HTML, чтобы поймать это для меня и сказать моему средству визуализации, чтобы включить выделение жирным шрифтом для этого сегмента текста.
Я нашел JSoup в сети, и он кажется многообещающим, но я думаю, что у него могут быть некоторые ограничения, которые по существу вычеркнут его как полезного для того, для чего он мне нужен.
Итак, у меня написан следующий тест:
String html = "Here's an example of <b>parsing</b> text, <b>character</b> by character.";
Document doc = Jsoup.parse(html);
String text = doc.text();
Elements boldText = doc.select("b");
System.out.println("Text: " + text);
for (int i = 0; i < boldText.size(); i++) {
Element b = boldText.get(i);
int characterIndex = ???;
System.out.println("Bold Text " + i + ", Character Index: " + characterIndex + " -> " + b.text());
}
Я могу получить список частей текста, которые выделены жирным шрифтом. Проблема в том, что на самом деле нет никакого способа получить индекс того, где начинается жирный шрифт и где он заканчивается. Это правда, что я мог бы использовать indexOf()
в Java для этого, но я не хочу использовать что-то подобное в сценарии, где пользовательский текст может быть буквально любым. Это открывает возможность того, что мы получим копии текста, и, таким образом, команды начнут путаться.
Кто-нибудь знает, как:
A) Пусть JSoup возвращает индекс символа, где начинаются атрибуты и где они заканчиваются
или
B) Знать Java-анализатор HTML, который может обеспечить необходимые функции.
Чтобы прояснить, что я хочу, мой код рендеринга будет выглядеть примерно так:
//pseudo-code for rendering characters:
for (int i = 0; i < characters; i++) {
char c = text.charAt(i);
if (index is not part of a tag) {
boolean bold = isThisIndexBetweenBoldTags(i); //This would be a function that checks if this character index is in range of an HTML tag or not
renderText(c, bold);
}
}
Спасибо за ваше время!