从toString打印textdata - Java

时间:2017-12-06 23:01:27

标签: java

我正在开发一个个人Java项目,并学习如何从文本文件中打印出数据。我的代码(如下所示)完全打印出userNameGenerator和personName数据,但我希望它能从我的Java类中的toString中打印出来。如何更改我的代码以从那里打印出来?

这就是我的toString的样子:

@Override
public String toString() {        
    return userNameGenerator + " -> " + "[" + personName + "]" ;
}

完整代码:

import java.util.*;
import java.io.*;

public class Codes {
    public static void main(String[] args) { 
        List<Codes2> personFile = new ArrayList<>();

        try {   
            BufferedReader br = new BufferedReader(new FileReader("person-data.txt"));
            String fileRead = br.readLine();
            while (fileRead != null) {
                String[] personData = fileRead.split(":");                
                String personName = personData[0];
                String userNameGenerator = personData[1];                
                Codes2 personObj = new Codes2(personName, userNameGenerator);               
                personFile.add(personObj);
                fileRead = br.readLine();
            }
            br.close();
        }

        catch (FileNotFoundException ex) {            
            System.out.println("File not found!");
        } 

        catch (IOException ex) {             
            System.out.println("An error has occured: " + ex.getMessage());
        }

        Set<String> newStrSet = new HashSet<>();
        for(int i = 0; i < personFile.size(); i++){
            String[] regionSplit = personFile.get(i).getUserNameGenerator().split(", ");
            for(int j = 0; j < regionSplit.length; j++){
                newStrSet.add(regionSplit[j]);
            }
        }

        for (String p: newStrSet) {
            System.out.printf("%s -> ", p);
            for (Codes2 s: personFile) {
                if (s.getUserNameGenerator().contains(p)) {
                    System.out.printf("%s, ", s.getPersonName());
                }
            }  
            System.out.println();
        }       
    }
}

Java类:

public class Codes2 implements Comparable<Codes2> {

    private String personName;
    private String userNameGenerator;

    public Codes2(String personName, String userNameGenerator) {
        this.personName = personName;
        this.userNameGenerator = userNameGenerator;
    }

    public String getPersonName() {
        return personName;
    }

    public String getUserNameGenerator() {
        return userNameGenerator;
    }

    @Override
    public int compareTo(Codes2 o) {
        return getUserNameGenerator().compareTo(o.getUserNameGenerator());
    }

    public int compare(Object lOCR1, Object lOCR2) {                
        return ((Codes2)lOCR1).userNameGenerator                        
                .compareTo(((Codes2)lOCR2).userNameGenerator);            
    }

    @Override
    public String toString() {        
        return userNameGenerator + " -> " + "[" + personName + "]" ;
    }
}

2 个答案:

答案 0 :(得分:2)

代码中的所有内容都是正确的。

我认为您应该在尝试打印时调用该方法:

for (Codes2 s: personFile) {
     if (s.getUserNameGenerator().contains(p)) {
         System.out.printf("%s, ", s.toString());
     }
}

这是因为打印出对象的类与保存数据的类没有紧密耦合。

答案 1 :(得分:0)

尝试:

@Override
public String toString() {        
    return String.format("%s -> [%s]",this.userNameGenerator,this.personName);
}