2014-09-19 35 views
-5

我需要幫助創建一個類。如何創建一個parsetoString類Java

StudentParser類是一個實用程序類,將用於從字符串中創建學生對象(在線學生或在線學生對象之一)。 StudentParser類對象不會被實例化。它必須具有以下方法:

public static Student parseStringToStudent(String lineToParse) 

parseStringToStudent方法的參數將在以下格式的字符串:

對於一個在線的學生,

type/firstName/lastName/studentID/credits/rate/computingFee 

對於oncampus學生,

type/firstName/lastName/studentID/credits/rate/residency/studentProgramFee 

這個字符串的一個真實例子是:

Online/Bill/Clinton/000002/6/450.00/10.00 
OnCampus/Barack/Obama/200005/8/400.00/Resident/12.00 
OnCampus/George/Bush/000001/6/844.00/NonResident/12.00 

包含每個學生信息的字符串將作爲字符串傳遞。方法parseStringToStudent將返回類型爲OnlineStudentOnCampusStudent的對象(取決於第一個子字符串是OnlineStudent還是OnCampusStudent),並將其返回給調用方法。該類型將始終出現在字符串的開頭,並始終爲Online或OnCampus中的一個。 (可以是小寫或大寫)您可以將其他方法添加到OnlineStudentOnCampusStudent類中,以使您的生活更輕鬆。對於居住地,它將是居民或非居民(可以是小寫或大寫)。您需要爲構成函數OncampusStudent中的居民值設置true或false,以確定此部分是Resident還是NonResident。

我該怎麼做? 除了這個之外,我還有其他所有的類,因爲我一直收到一個錯誤,它找不到任何.sets的值。

public class StudentParser { 

    public static Student parseStringToStudent (String lineToParse) { 

     String[] Student = lineToParse.split("/"); 

     Student student; 
     String type = Student[0].toLowerCase(); 

     if (type.equals("onlinestudent")) { 
      student = new OnlineStudent(); 
      student.setComputingFee(Double.valueOf(Student[6])); 
     } else if (type.equals("oncampusstudent")) { 
      student = new OnCampusStudent(); 
      student.setresidentStatus(Student[6]); 
      student.setstudentProgramFee(Double.valueof(Student[7])); 
     } else { 
      throw new IllegalArgumentException ("Wrong type " + type); 
     } 

     student.setfirstName(Student[1]); 
     student.setlastName(Student[2]); 
     student.setstudentID(Student[3]); 
     student.setcreditNum(Integer.valueOf(Student[4])); 
     student.setRate(Double.valueOf(Student[5])); 

     return student; 
    } 
} 
+7

只是友善的提醒,在這個網站上,沒有人會做你的功課。人們在這裏可以幫助你,如果你陷入代碼中的某個地方,並且你無法弄清楚。我建議你張貼你已經做了:) – 2014-09-19 17:40:16

+1

你正在給一個字符串與所有的信息。製作學生對象,並將字符串中的信息放入學生對象中。 – csmckelvey 2014-09-19 17:40:19

+2

[請閱讀本文](http://whathaveyoutried.com)。 StackOverflow不是「爲我編寫代碼」的地方。你必須付出一些努力,你必須在提問之前進行搜索和研究。請閱讀:[「How to ask」](http://stackoverflow.com/help/how-to-ask) – Barranka 2014-09-19 17:45:21

回答

4

因爲這似乎是功課,我只給一些提示:

  • 通過使用String.split/小號分裂它打破串入領域。 (您需要了解正則表達式的基本知識。)
  • 使用String.compareToIgnoreCase檢查類型字段,並根據其值進行處理。
  • 現在您知道預期的值,依次解析剩餘的字段。
  • 用提取的值調用構造函數OnCampusStudentOnlineStudent。 (或者您創建並初始化Student對象。)
  • 返回新創建的Student對象。

如果您正在解析文本,請務必特別注意錯誤處理。不要默默地認爲每個輸入都是有效的。在任何步驟檢查輸入是否與指定的格式相匹配,如果沒有,則拋出異常並提供有用的錯誤消息。 (例如:準備處理字段數量錯誤的字符串。)

+0

謝謝我只需要一些提示。我瞭解這個網站不是爲了讓別人做你的功課。我只需要一些幫助就開始了。 – jrsk8chivas 2014-09-19 17:58:56

0

我通過/分割字符串,並使用每個字段:

public class StudentParser{ 
    public static Student parseStringToStudent(String lineToParse){ 
     String[] fields = lineToParse.split("/"); 

     Student retVal; 
     String type = fields[0].toLowerCase(); 
     if (type.equals("onlinestudent") { 
      retVal = new OnlineStudent(); 
      retVal.setComputingFee (Integer.valueOf(fields[6])); 
     } else if (type.equals("oncampusstudent")) { 
      retVal = new OnCampusStudent(); 
      retVal.setResidency (fields[6]); 
      retVal.setProgramFee (Integer.valueOf(fields[7])); 
     } else { 
      throw new IllegalArgumentException ("Wrong type " + type); 
     } 

     retVal.setFirstName (fields[1]); 
     retVal.setLastName (fields[2]); 
     retVal.setId (fields[3]); 
     retVal.setCredits (Integer.valueOf(fields[4])); 
     retVal.setRate (Integer.valueOf(fields[5])); 

     return retVal; 
    } 
} 

注意:這是與(大多數)省略了清楚起見,輸入驗證精簡溶液。

+0

謝謝,我試過這個,但我相信我需要一個arraylist而不是一個數組。 – jrsk8chivas 2014-09-19 22:33:23

+0

我試過了,它給我所有student.setBLANK值的錯誤? – jrsk8chivas 2014-09-19 22:34:05

+0

@ jrsk8chivas您可以將任何數組轉換爲數組列表! [閱讀此問題及其答案](http://stackoverflow.com/questions/157944/how-to-create-arraylist-arraylistt-from-array-t) – Barranka 2014-09-23 00:09:08