Попробовал переделать под регулярки, но хрен редьки не слаще.
По примеру из задания выводит
{span xml:lang="en" lang="en"}{b}{span}Turanga Leela{/span}
{span}Super{/span}
{span}girl{/span}
Не пойму, куда девается концовка {/b}{/span} из первой строки.
package com.javarush.task.task19.task1918;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileReader filer = new FileReader(reader.readLine());
reader.close();
BufferedReader HTMLreader = new BufferedReader(filer);
StringBuffer buffer = new StringBuffer();
String searchString = HTMLreader.readLine();
while (searchString!=null) {
buffer.append(searchString);
searchString = HTMLreader.readLine();
}
searchString = buffer.toString();
String middleExpression = "<" + args[0] + "[^>]*>.*</" + args[0] + ">";
//System.out.println(middleExpression);
String allExpression = "<" + args[0] + "[^>]*?>.*?("+middleExpression+")*.*?</" + args[0] + ">";
//System.out.println(allExpression);
//System.out.println(searchString);
Pattern pattern = Pattern.compile(allExpression);
Matcher matcher = pattern.matcher(searchString);
// My reg "<"+args[0]+"[^>]*?>.*(<"+args[0]+"[^>]*?>.*?</"+args[0]+">)*.*?</"+args[0]+">"
while (matcher.find()) {
System.out.println(matcher.group());
}
/*String outString = "<"+args[0];
int offsetCounter = 0;
boolean endOfTag = false;
boolean endOfLine = false;
int checkFirstRow = 0;
//System.out.println(searchString);
while (searchString!=null) {
//searchString.substring(searchString.indexOf(begTag), searchString.indexOf(begTag));
String[] inBetween = searchString.split(args[0]);
for (int i=(1-checkFirstRow); i < inBetween.length; i++) {
checkFirstRow=0;
if (inBetween[i].endsWith("</")) {
endOfLine = false;
if (offsetCounter==0) endOfTag=true;
else {
offsetCounter=offsetCounter-2;
endOfTag=false;
}
}
else if (inBetween[i].endsWith("<")) {
endOfTag = false;
endOfLine = false;
}
else {
endOfLine = true;
outString+=inBetween[i];
checkFirstRow=1;
//System.out.println(outString);
}
if (!endOfLine) {
if (endOfTag) {
outString += inBetween[i] + args[0] + ">";
System.out.println(outString);
outString = "<" + args[0];
offsetCounter = 0;
i++;
} else {
outString += inBetween[i] + args[0];
//System.out.println(outString);
offsetCounter++;
}
}
}
if (searchString.endsWith("<"+args[0]))
{
offsetCounter=0;
checkFirstRow=1;
outString+=" ";
}
searchString = HTMLreader.readLine();
//System.out.println(searchString);
}*/
filer.close();
HTMLreader.close();
}
}