powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Стек, теги XML
8 сообщений из 33, страница 2 из 2
Стек, теги XML
    #39941550
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utlikk
Задание такое:
.
Написать программу, проверяющую правильно ли в файле XML вложены и закрыты теги с ипользованием стека как вспомогательной системы. Программа проверяет только некоторые теги, их список записан в текстовом файле с синтаксисом, используемом во внешнем представлении объекта класса Properties.
.
txt файл с Properties такой:
count=3
e1=YEAR
e2=PRICE
e3=CD
.
Подскажите в какую сторону двигаться, что можно тут попробовать, потому что не хватает значний языка для реализации такой задачи.
Моя идея такая: создать два стека - левый, в который ложим открывающиеся теги, и правый для закрывающихся, а потом их сравниваем, при не правильно составленном XML документе получим предупреждение типа в таком то месте ошибка.


Такое решение.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public class Solution {
    public boolean isValid(String code) {
        Stack<String> stack = new Stack<>();
        for(int i = 0; i < code.length();){
            if(i>0 && stack.isEmpty()) return false;
            if(code.startsWith("<![CDATA[", i)){
                int j = i+9;
                i = code.indexOf("]]>", j);
                if(i < 0) return false;
                i += 3;
            }else if(code.startsWith("</", i)){
                int j = i + 2;
                i = code.indexOf('>', j);
                if(i < 0 || i == j || i - j > 9) return false;
                for(int k = j; k < i; k++){
                    if(!Character.isUpperCase(code.charAt(k))) return false;
                }
                String s = code.substring(j, i++);
                if(stack.isEmpty() || !stack.pop().equals(s)) return false;
            }else if(code.startsWith("<", i)){
                int j = i + 1;
                i = code.indexOf('>', j);
                if(i < 0 || i == j || i - j > 9) return false;
                for(int k = j; k < i; k++){
                    if(!Character.isUpperCase(code.charAt(k))) return false;
                }
                String s = code.substring(j, i++);
                stack.push(s);
            }else{
                i++;
            }
        }
        return stack.isEmpty();
    }
}



Хорошего вам дня!
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941562
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton
Можно ускорить этот парсер.

Чего там ускорять то?
некая избыточность c rawSource есть, но как-то хочется возможности по уже распарсенному документу имееть возможно оригинал возстановить.

Нет. Я про это.

Обычно сверх-быстрые парсеры такие как Univocity, StaX, стараются не создавать объекты без необходимости.
Даже строки они создают только по заказу. С их точки зрения парсинг заключается просто в маркировке
потока символов. А создание объекта тег или csv-value носит отложенный характер. Где-то я слышал
термин non-invasive parser но не могу найти подтверждения.
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941650
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсинг XML - вобщем-то решенная задача уже лет 20.

Вот интереснее семантика Yaml. Как он раскладывается на Elements/Nodes/Attributes.
Я как-то решил разбирать исходники Snake-Yaml и чуть не сломал себе мозг.
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или вот например еще. На базе Univocity мы писали свой парсер который реагирует только
на определенную комбинацию ключевых полей в текущей строке и только тогда отдает
на хендлер набор полей как String[]. Ключевые поля как-то хитро отрабатывались на уровне
char[] потока.
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941709
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде топикстартер вообще исчез
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941826
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Вроде топикстартер вообще исчез


Зарегистрирован: 26 марта 2020, 08:28
Последнее сообщение: 26 марта 2020, 10:35 (1 дней 21 часов 25 минут назад)

Хорошего вам дня!
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941835
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такие топик стартеры обычно - простят 1 вопрос в 5 форумов и потом сидят курят.
...
Рейтинг: 0 / 0
Стек, теги XML
    #39941845
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Такие топик стартеры обычно - простят 1 вопрос в 5 форумов и потом сидят курят.


Leetcode активно обсуждает такие задачи. Там можно предлагать свои задачи и добавлять тесты к существующим.

Хорошего вам дня!
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Стек, теги XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]