Как разделить строку где встречаются два тега, при этом название тегов может быть любое в Java
Есть строка:
<h1><h1>hello my dear friend</h1></h1><par>what's up</par>
Мне необходим разделить на две строки, где встречаются теги </h1><par>, при этом название закрывающейся тега сохранить в первой строке, а открывающейся во второй, также проблема в том что название тегов может быть любое.
Ожидаемый результат:
<h1><h1>hello my dear friend</h1></h1>
<par>what's up</par>
Пока получилось разделить только по одному символу и приклеить его в начала строки, или в конец:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int testCases = Integer.parseInt(in.nextLine());
while (testCases > 0) {
String line = in.nextLine();
String arr[] = line.split("(?<=(<)");
for (String m: arr) {
System.out.println(m);
}
testCases--;
}
}
Ответы (2 шт):
Автор решения: Alex Rudenko
→ Ссылка
Можно просто вставить \n между любым закрывающим и открывающим тэгами, используя String::replaceAll:
String html = "<h1><h1>hello my dear friend</h1></h1><par>what's up</par>";
System.out.println(html.replaceAll("(</\\w+>)(<\\w+>)", "$1\n$2"));
Вывод:
<h1><h1>hello my dear friend</h1></h1>
<par>what's up</par>
Автор решения: ilyapl1994
→ Ссылка
Более "топорный" способ:
public static void main(String[] args) {
TestClass test=new TestClass();
String html="<h1></h1><h2></h2><h3></h3><h3></h3><h1></h1><h2></h2>";
String tag1="</h1>";
String tag2="<h2>";
String[] res=test.parse(html, tag1, tag2);
for(String s:res) System.out.println("str="+s);
}
public String[] parse(String html, String tag1, String tag2){
String[] splitResult=html.split(tag1+tag2);
String[] result=new String[splitResult.length];
int i=0;
for (String s:splitResult){
if (i==0){
result[i]=s+tag1; i++;continue;}
if (i==splitResult.length-1) {
result[i]=tag2+s;i++;continue;}
result[i]=tag2+s+tag1;
i++;
}
return result;
}