У меня есть строка, части которой обрамлены в теги. Например:
String str = "This text is not highlighted<hlTag>but this is</hlTag>" +
"this isn't again<hlTag>and this is</hlTag>";
Мне нужно распарсить ее на части — те, что внутри тегов, должны сохранятся в одни переменные, а те, что вне тегов — в другие. Результатом должен быть масив с таких объектов. При этом важно учитывать порядок частей в исходном предложении.
Должно быть как-то так: if highlighted, list.add(new HighlPart(text)), else list.add(new NonHighlPart(text)).
Я написал два регулярных выражения, для частей в тегах и вне их и они работают:
Matcher insideTagsMatcher = Pattern.compile(preTag + "(.+?)" + postTag).matcher(str);
Matcher outsideTagsMatcher = Pattern.compile("^(.*?)" + preTag +
"|" + postTag + "(.*?)" + preTag +
"|" + "</hlTag>(.*?)$").matcher(str);
Однако я не знаю, как учитывать порядок частей в исходном предложении при парсинге с помощью таких выражений. Прошу помощи.
Использовать Entry
необязательно. Можно просто создать свою обертку.
final static String preTag = "hlTag";
final static String postTag = "/hlTag";
public static void main(String[] args) {
String str = "This text is not highlighted<hlTag>but this is</hlTag>" +
"this isn't again<hlTag>and this is</hlTag>";
String[] strings = str.split("<|>");
//if value true - in tag, else out tag
List<Map.Entry<String,Boolean>> result = new ArrayList<>();
boolean inTag = false;
for (String s: strings){
switch (s) {
case preTag:
inTag = true;
break;
case postTag:
inTag = false;
break;
default:
result.add(new AbstractMap.SimpleEntry<String, Boolean>(s, inTag));
break;
}
}
}
Результат:
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, какого формата и какого размера должны быть иконки для методов setSmallIcon() и setLargeIcon() и где их можно скачать? Или есть ли в Android стандартные...
Всем привет ,хотел проверить наличие интернета вот таким способом