Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение строк в файле 
V
    Опции темы
ioManip
Дата 12.10.2014, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Привет! Есть к примеру 2 файла xml такого содержания:
1.xml
Код

<?xml version = "1.0"?>
<note>
<to>Вася</to>
<from>Мария</from>
<head>Напоминание</head>
</note>


2.xml
Код

<?xml version = "1.0"?>
<note>
<to>Петя</to>
<from>Мария</from>
<head>Ответ</head>
</note>


Я парсю эти файлы, и на выходе получаю
Код

Список отправителей: 
   Мария
   Мария
Список получателей: 
   Вася
   Петя
Заголовок: 
   Напоминание
   Ответ


Но мне нужно, чтобы одинаковые имена не повторялись на выходе.
Мне говорили, что есть какой то фильтр, но я что то не могу найти его.
Main.java
Код

public class Main {

    public static void main(String[] args) throws Exception {

        TagHandler xml = new TagHandler();
        
        ArrayList<String> xmlFiles = new ArrayList<>();
        
        File dir = new File("D:\\SourceCode\\NetBeans\\Java\\BGPU\\ParseXMLFile");
        
        BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
        
        out.append("Список отправителей: ");
        out.newLine();
        
        for (File file : dir.listFiles()) {
            if (file.getName().endsWith(".xml")) {
                xmlFiles.add(file.getName());              
                xml.read(dir, file.getName());
                out.append("   " + xml.getFrom());
                out.newLine();
            }
        }
        
        out.append("Список получателей: ");
        out.newLine();
        
        for (File file : dir.listFiles()) {
            if (file.getName().endsWith(".xml")) {
                xmlFiles.add(file.getName());              
                xml.read(dir, file.getName());
                out.append("   " + xml.getTo());
                out.newLine();
            }
        }
        
        out.append("Заголовок: ");
        out.newLine();
        
        for (File file : dir.listFiles()) {
            if (file.getName().endsWith(".xml")) {
                xmlFiles.add(file.getName());              
                xml.read(dir, file.getName());
                out.append("   " + xml.getHead());
                out.newLine();
            }
        }
        out.close();
    }
}

TagHandler.java
Код

public class TagHandler extends Tag {

    public void read(File dir, String fileName) throws Exception {
        
        BufferedReader in = new BufferedReader(new FileReader(fileName));

        String content;
        String temp;
        StringTokenizer st;
        
        while ((content = in.readLine()) != null) {
            
            st = new StringTokenizer(content, "<>");
            
            while (st.hasMoreTokens()) {
                
                switch (st.nextToken()) {
                    
                    case "to": 
                        if ((temp = st.nextToken()) != "/to") {
                            setTo(temp);
                            break;
                        }
                    
                    case "from":
                        if ((temp = st.nextToken()) != "/from") {
                            setFrom(temp);
                            break;
                        }
                    
                    case "head": 
                        if ((temp = st.nextToken()) != "/head") {
                            setHead(temp);
                            break;
                        }
                }
            }
        }
        in.close();
    }
}

Tag.java
Код

public class Tag {
    
    String toTag;
    String fromTag;
    String headTag;
    String bodyTag;

    public void setTo(String to) {
        toTag = to;
    }
    
    public void setFrom(String from) {
        fromTag = from;
    }
    
    public void setHead(String head) {
        headTag = head;
    }
    
    public String getTo() {
        return toTag;
    }
    
    public String getFrom() {
        return fromTag;
    }
    
    public String getHead() {
        return headTag;
    }
}


Это сообщение отредактировал(а) ioManip - 12.10.2014, 11:20
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
sgrey
Дата 12.10.2014, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



смотря что нужно сделать. Если убрать повторения - конечная цель, то нужно создать Set или HashMap и сохранять туда имена, потом оттуда их записать в файл
PM MAIL   Вверх
ioManip
Дата 13.10.2014, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



sgrey, А можно примерчик?  smile 
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
ioManip
Дата 14.10.2014, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Все уже не нужно smile Разобрался, спасибо за совет!
Main.java
Код

public class Main {

    public static void main(String[] args) throws Exception {

        TagHandler xml = new TagHandler();
        
        File dir = new File("D:\\SourceCode\\NetBeans\\Java\\BGPU\\ParseXMLFile");

        for (File file : dir.listFiles()) {
            if (file.getName().endsWith(".xml")) {             
                xml.read(dir, file.getName());
                xml.outputToFile();
            }
        }
    }
}


TagHandler.java
Код

public class TagHandler extends Tag {
    
    HashSet<String> toTag = new HashSet<>();
    HashSet<String> fromTag = new HashSet<>();
    HashSet<String> headTag = new HashSet<>();

    public void read(File dir, String fileName) throws Exception {
        
        BufferedReader in = new BufferedReader(new FileReader(fileName));

        String content;
        String temp;
        StringTokenizer st;
        
        while ((content = in.readLine()) != null) {
            
            st = new StringTokenizer(content, "<>");
            
            while (st.hasMoreTokens()) {
                
                switch (st.nextToken()) {
                    
                    case "to": 
                        if ((temp = st.nextToken()) != "/to") {
                            setTo(temp);
                            toTag.add(temp);
                            break;
                        }
                    
                    case "from":
                        if ((temp = st.nextToken()) != "/from") {
                            setFrom(temp);
                            fromTag.add(temp);
                            break;
                        }
                    
                    case "head": 
                        if ((temp = st.nextToken()) != "/head") {
                            setHead(temp);
                            headTag.add(temp);
                            break;
                        }
                }
            }
        }
        in.close();
    }
    
    public void outputToFile() throws IOException {
        
        BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
        
        out.append("Список отправителей: ");
        out.newLine();
        
        for (String s : toTag) {
            out.append("   " + s + System.getProperty("line.separator"));
        }

        out.write("Список получателей: ");
        out.newLine();
        
        for (String s : fromTag) {
            out.append("   " + s + System.getProperty("line.separator"));
        }

        out.write("Заголовок: ");
        out.newLine();
        
        for (String s : headTag) {
            out.append("   " + s + System.getProperty("line.separator"));
        }
        out.close();
    }
}


Класс Tag.java без изменений
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.