2016-11-06 9 views
0

私は、テキストファイルを解析し、従業員が参加した年に基づいて配列に情報を格納し、各行に基づいてemployee、salesman、またはexecutiveオブジェクトを作成するクラスを作成しようとしています。私の教授は今年構文解析について混乱しています

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

解析するために私たちは、この行を与え、この方法は、私がGETEMPLOYEEクラスでEmployeeオブジェクトを初期化する方法について困惑している

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(" "); 


} 

文書の残りの部分を解析します、私はしばらくの方法で任意の私のダブルスを解析する必要がある場合、および実行する方法と

はここに私のテキストファイルだと

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 

私の従業員クラス

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; 
} 
} 

そして、私のドライバー

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

['string.split()']のヘルプを参照してください(http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String ))、それは助けるかもしれません... – Lucero

+0

私は分割の仕組みを理解しています、私はちょうどgetEmployeeメソッドがテキストファイルの残りの部分を解析する方法と私の従業員オブジェクトにそれを格納する方法を確信しています – WILLO567

+0

'getEmployee'は、一度に1行。テキストファイルの各行が読み込まれ、次に解析されます。また、私のコメントは、レコードがスペース区切りではなくカンマで区切られているため、投稿したコードを見ると、その仕組みがはっきりしていないという印象を受けました。 – Lucero

答えて

0

あなたの最初の質問に答えるために、従業員のコンストラクタは、文字列を取り、二重の入力として、あなたは新しい従業員オブジェクトを作成するときにされました(あなたが別のコンストラクタを作る場合を除き)あなたはこのように、これらの値を指定する必要があります解析ビットの場合

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

、それはGETEMPLOYEEメトのように見えますdは期待通りですので、あなたのwhileループに置いたのはこれです。

Employee e = getEmployee(line); 

getEmployeeメソッドはまだ不完全です。 Employeeオブジェクトを作成するときにはすでに名前と給与が必要なので、最初に解析してからオブジェクトを作成する必要があります。ダブルスを解析について

は、Double.parseDouble(String)メソッドがありますが、あなたのテキストファイルに給与がとにかく整数としてフォーマットされているようだ、とあなたは

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

ような何かをしようとした場合Javaは整数を自動的に倍精度にキャストする必要があります。給料がクラス自体の倍数であるべきかintであるべきかは別の話です。

+0

これで、getEmployeeの情報が情報を処理します。解析のための情報がなくなっていますか?そうでない場合は、従業員にどのように宣言しますか?従業員の名前と給料があるので、私は3と4を​​通過するでしょうか?セールスマンとエグゼクティブのサブクラスではどうしたらいいですか? – WILLO567

+1

すべては、Employeeクラスの要件がどのようなものであるかによって異なります。あなたが必要とするのは実際には最初の "splitWithComma"文字列にあります。さまざまなタイプの従業員を反映するには、従業員のスーパークラスを使用し、RegularEmployee、SalesmanおよびExecutiveにそれを継承させることが適切な場合があります。 – Lidae

関連する問題