user8991131
user8991131

Reputation:

Printing textdata from toString - Java

I am working on a personal Java project and learning how to print out data from a text file. My code (as you can see below) prints out the userNameGenerator and personName data perfectly fine but I want it to be printed out from the toString in my Java Class. How can I change my code to print it out from there?

This is how my toString looks like:

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

Full code:

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 Class:

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 + "]" ;
    }
}

Upvotes: -1

Views: 74

Answers (2)

DDeMartini
DDeMartini

Reputation: 337

Try:

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

Upvotes: 0

Cesar Chacon
Cesar Chacon

Reputation: 26

Everything looks right in your code.

I think you should just call the method when you are trying to print it out:

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

This follows the fact that the class that prints out the object is not so closely coupled with the class that hold the data.

Upvotes: 1

Related Questions