2016-11-06 3 views
0

Ich versuche, eine Klasse zu schreiben, die eine Textdatei analysiert, speichert die Informationen in einem Array basierend auf dem Jahr der Mitarbeiter beigetreten und erstellen Sie ein Mitarbeiter, Verkäufer oder Executive-Objekt basierend auf jeder Zeile. Mein Professor hat uns diese Zeile das Jahr zu analysierenVerwirrt über Parsing-Methode

while ((line = br.readLine()) != null) 
    { 
     int year = Integer.parseInt(line.substring(0,4)); 
     Employee e = getEmployee(line); 
    } 

Und diese Methode den Rest des Dokuments

public static Employee getEmployee(String line) 
{ 
    Employee e= new Employee() 
    String[] splitWithComma = line.split(","); 
    String first = splitWithComma[0]; 
    String[] firstSplit = first.split(" "); 
    String second = splitWithComma[1]; 
    String[] secondSplit = second.split(" "); 
    String third = splitWithComma[2]; 
    String[] thirdSplit = third.split(" "); 
    String fourth = splitWithComma[3]; 
    String[] fourthSplit = fourth.split(" "); 
    String fifth=splitWithComma[4]; 
    String[] fifthSplit = fifth.split(" "); 


} 

Ich bin verwirrt über zu analysieren, wie ich das Employee-Objekt in der getEmployee Klasse initialisieren sollte und wenn ich alle meine Doppel in der währenden Methode analysieren muß, und wie die

tun Hier ist meine Textdatei

2014, Employee, John Baker, 15000 
2014, Salesman, Amanda Stein, 30000, 1100000 
2014, Executive, Jessica Kettner, 53 
2015, Employee,Zach Edwards, 20000 
2015, Salesman,Shelby Douglas, 45000, 2345 
2015, Executive, Corey Matthews, 67000, 48 

Meine Mitarbeiter Klasse

import java.util.*; 

public class Employee 
{ 
private String name; 
private double monthlySalary; 

public Employee(String name, double monthlySalary) 
{ 
    this.name=name; 
    this.monthlySalary=monthlySalary; 
} 



public String getName() { 
    return name; 
} 



public void setName(String name) { 
    this.name = name; 
} 



public double getMonthlySalary() { 
    return monthlySalary; 
} 



public void setMonthlySalary(int MonthlySalary) 
{ 

} 



public double annualSalary() 
{ 
    return monthlySalary*12; 
} 







public String toString() 
{ 
    String str; 
    str="Name: "+name; 
    str+="\nMonthly Salary: "+monthlySalary; 
    return str; 
} 
} 

Und mein Fahrer

import java.io.*; 
import java.util.*; 
public class employeeDriver 
{ 
public static void main(String[] args) 
{ 
    String line; 
    String input; 
    Scanner readInput=null; 
    Scanner readFile = null; 
    BufferedReader br=null; 

    try 
    { 
     br = new BufferedReader(new FileReader("tester.txt")); 
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("The file can't be opened"); 
     System.exit(0); 
    } 


try 
{ 
    while ((line = br.readLine()) != null) 
    { 
     int year = Integer.parseInt(line.substring(0,4)); 
     Employee e = getEmployee(line); 
    } 

} 

catch (IOException ioe) 
{ 
    System.out.println("Can't read file"); 
} 
finally 
{ 
    System.exit(0); 
} 

} 


public static Employee getEmployee(String line) 
{ 
    Employee e= new Employee() 
    String[] splitWithComma = line.split(","); 
    String first = splitWithComma[0]; 
    String[] firstSplit = first.split(" "); 
    String second = splitWithComma[1]; 
    String[] secondSplit = second.split(" "); 
    String third = splitWithComma[2]; 
    String[] thirdSplit = third.split(" "); 
    String fourth = splitWithComma[3]; 
    String[] fourthSplit = fourth.split(" "); 
    String fifth=splitWithComma[4]; 
    String[] fifthSplit = fifth.split(" "); 


} 
} 
+0

Lesen Sie die Hilfe zu ['string.split()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split (java.lang.String)), könnte es helfen ... – Lucero

+0

Ich verstehe, wie Split funktioniert, ich bin nur unsicher, wie die GetEmployee-Methode den Rest der Textdatei analysieren und wie es in meinem Employee-Objekt – WILLO567

+0

'GetEmployee 'nur analysiert wird eine Zeile nach der anderen; Jede Zeile der Textdatei wird gelesen und dann mit ihr analysiert. Auch mein Kommentar zur Hilfe war, weil die Datensätze durch Kommas getrennt und nicht durch Leerzeichen getrennt sind. Wenn ich also den Code sah, den Sie gepostet hatten, hatte ich den Eindruck, dass es nicht klar war, wie es funktioniert. – Lucero

Antwort

0

Um Ihre erste Frage, die Mitarbeiter Konstruktor nimmt einen String und ein Doppel als Eingang zu beantworten, so dass, wenn Sie das neue Mitarbeiter-Objekt erstellen Sie müssen (es sei denn, Sie einen anderen Konstruktor machen) diese Werte, wie diese liefern:

Employee e = new Employee("John Baker", 15000); 

Für das Parsen Bit, es sieht aus wie die getEmployee metho d erwartet wird, handhaben, dass, so dass alles, was Sie in Ihrer while-Schleife gesetzt ist dies

Employee e = getEmployee(line); 

Die getEmployee Methode allerdings unvollständig ist. Da Sie den Namen und das Gehalt bereits beim Erstellen des Employee-Objekts benötigen, sollten Sie zuerst die Analyse durchführen und dann das Objekt erstellen.

Über Parsen verdoppelt, gibt es eine Double.parseDouble (String) Methode, aber es scheint, dass ohnehin als ganze Zahlen in der Textdatei werden die Gehälter formatiert, und wenn Sie versuchen, wie

int salary = Integer.parseInt(salaryStr); 
Employee e = new Employee("John Baker", salary); 

etwas zu tun Dann sollte Java die Ganzzahl automatisch in ein Double-Zeichen umwandeln. Ob das Gehalt doppelt oder int in der Klasse selbst sein sollte, ist eine andere Geschichte.

+0

OK, also behandelt die Information in getEmployee die Information. Fehle ich mehr Informationen zum Parsen, und wenn nicht, wie würde ich es für Angestellte erklären? Würde ich drei und vier überholen, da sie den Namen und das Gehalt des Mitarbeiters haben? Und was würde ich für meine Verkäufer- und Executive-Unterklassen tun? – WILLO567

+1

Es hängt alles davon ab, was Ihre Anforderungen für die Mitarbeiterklasse sind. Es scheint, als ob Sie viele unnötige Splits machen, alles was Sie brauchen ist wirklich in der ersten "splitWithComma" Zeichenfolge.Um die verschiedenen Arten von Mitarbeitern widerzuspiegeln, kann es sinnvoll sein, eine Employee-Superklasse zu verwenden und dann RegularEmployee, Salesman und Executive davon zu übernehmen. – Lidae