Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сравнение строк в файле


Автор: ioManip 12.10.2014, 11:20
Привет! Есть к примеру 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;
    }
}

Автор: sgrey 12.10.2014, 17:45
смотря что нужно сделать. Если убрать повторения - конечная цель, то нужно создать Set или HashMap и сохранять туда имена, потом оттуда их записать в файл

Автор: ioManip 13.10.2014, 12:49
sgrey, А можно примерчик?  smile 

Автор: ioManip 14.10.2014, 15:04
Все уже не нужно 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 без изменений

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)