2014-09-19 37 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