Доброго всем времени суток. Коллеги, помогите, пожалуйста, найти ошибку в решении. Нужен пример - на котором код отработает неверно. Валидатор ни в какую не принимает - а фантазия на примеры уже иссякла.
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws IOException {
//exit, if args[0] is empty
if (args.length == 0) {
System.out.println("args[0] mustn't me empty!");
return;
}
//read filename
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
//read file data
StringBuilder sb = new StringBuilder();
char[] buffer = new char[8192];
int bufferFill;
FileReader fileReader = new FileReader(fileName);
while (fileReader.ready()) {
bufferFill = fileReader.read(buffer);
sb.append(buffer, 0, bufferFill);
}
fileReader.close();
//string to parse
String s = sb.toString();
ArrayList<Integer> bTags = new ArrayList<Integer>();
ArrayList<String> tagBodyList = new ArrayList<String>();
//parsing - 1-st pass - get all tag positions
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '<') {
bTags.add((s.indexOf('/', i) != -1 && s.indexOf('/', i) < s.indexOf('>', i)) ? -i : i);
}
}
//System.out.println(bTags.toString());
//parsing 2-nd pass - get all tag bodies
while (!bTags.isEmpty()) {
int t = 0;
int counter = 1;
while (counter > 0) {
t++;
counter += bTags.get(t) > 0 ? 1 : -1;
}
//we have tags pair 0 and t
String tagBody = s.substring(bTags.get(0), s.indexOf('>', -bTags.get(t))) + '>';
//getting tag name
String tagName = s.substring(s.indexOf('/', -bTags.get(t)) + 1, s.indexOf('>', -bTags.get(t))).trim();
if (tagName.equals(args[0])) {
tagBodyList.add(tagBody);
}
//remove used tag positions
bTags.remove(t);
bTags.remove(0);
}
//d:\Java\Work\html3.txt
//printing parse result
for (int i = 0; i < tagBodyList.size(); i++) {
System.out.println(tagBodyList.get(i));
}
}
}