Есть много нюансов для анализа HTML в дикой природе, один из самых забавных заключается в том, что многие страницы не соответствуют никаким стандартам. При этом, если весь ваш HTML будет таким же простым, как ваш пример, чего-то вроде этого более чем достаточно:
char[] cs = s.toCharArray();
StringBuilder sb = new StringBuilder();
boolean tag = false;
for (int i=0; i<cs.length; i++) {
switch(cs[i]) {
case '<': if ( ! tag) { tag = true; break; }
case '>': if (tag) { tag = false; break; }
case '&': i += interpretEscape(cs, i, sb); break;
default: if ( ! tag) sb.append(cs[i]);
}
}
System.err.println(sb);
Где interpretEscape()
должен знать, как преобразовать экранированные символы HTML, такие как >
, в их символьные аналоги и пропустить все символы до конца ;
.