2014-09-19 2 views
-5

Мне нужна помощь в создании класса.Как создать класс parsetoString Java

Класс StudentParser - это класс утилиты, который будет использоваться для создания студенческого объекта (одного из студента онлайн или объекта студента oncampus) из строки. Объект класса 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 вернет объект типа OnlineStudent или OnCampusStudent (в зависимости от того, является ли первая подстрока OnlineStudent или OnCampusStudent) и вернуть ее вызывающему методу. Тип всегда будет присутствовать в начале строки и всегда будет одним из Online или OnCampus. (Это может быть нижний регистр или верхний регистр). Вы можете добавить другие методы в классы OnlineStudent и OnCampusStudent, чтобы сделать вашу жизнь проще. Для резидентства он будет одним из резидентов или нерезидентов (это может быть нижний регистр или верхний регистр). Вам нужно будет установить true или false для значения резидентства в конструкторе OncampusStudent, является ли эта часть резидентной или нерезидентной.

Как мне это сделать? У меня есть все остальные классы, кроме этого, потому что я продолжаю получать ошибку, когда он не может найти значения для любых .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

Просто дружественное напоминание, на этом веб-сайте никто не будет делать домашнее задание. Люди здесь, чтобы помочь вам, если вы застряли где-то в своем коде, и вы не можете понять это. Я советую вам опубликовать то, что вы сделали :) –

+1

Вам дается строка со всей информацией. Создайте объект-ученик и поместите информацию из строки в объект-ученик. – csmckelvey

+2

[прочитайте эту статью] (http://whathaveyoutried.com). StackOverflow не является местом «do-my-coding-work-for-me». Вы должны приложить определенные усилия, вам нужно искать и исследовать, прежде чем спрашивать. Пожалуйста, прочитайте: [«Как спросить»] (http://stackoverflow.com/help/how-to-ask) – Barranka

ответ

4

Поскольку это, кажется, домашнее задание, я буду только дать несколько советов:

  • разорвать строку в полях, разделив ее на / с использованием String.split. (Для этого вам нужно понять основы регулярных выражений.)
  • Проверьте поле типа с помощью String.compareToIgnoreCase и продолжите работу в зависимости от его значения.
  • Теперь вы знаете значения, которые следует ожидать, поочередно проанализировать оставшиеся поля.
  • Вызвать конструктор OnCampusStudent или OnlineStudent с извлеченными значениями. (Или, тем не менее, вы создаете и инициализируете объекты Student.)
  • Верните только что созданный объект Student.

Если вы разбираете текст, всегда обращайте особое внимание на обработку ошибок. Не говорите, что каждый вход будет действительным. Проверьте на любом шаге, что вход соответствует указанному формату и генерирует исключение с полезным сообщением об ошибке, если это не так. (Пример: будьте готовы обрабатывать строку с неправильным количеством полей.)

+0

Спасибо, мне нужны были только намеки. Я понимаю, что этот сайт здесь не для других, чтобы делать домашнее задание. Мне просто нужна была помощь, чтобы начать это. – jrsk8chivas

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

Спасибо, я попробовал это, но я считаю, что мне нужен аррайалист вместо массива. – jrsk8chivas

+0

Я попробовал, и это дает мне ошибки для всех значений student.setBLANK? – jrsk8chivas

+0

@ jrsk8chivas Вы можете преобразовать любой массив в список массивов! [Прочтите этот вопрос и его ответы] (http://stackoverflow.com/questions/157944/how-to-create-arraylist-arraylistt-from-array-t) – Barranka

Смежные вопросы