Я работаю над программой, которая будет проходить через список записей (идентификаторы и билеты) и проанализировать их на два списка соответственно. Он также перекрестно просматривает списки, чтобы узнать, какие идентификаторы имеют соответствующий билет на основе имен. Вот ссылка на более раннюю версию: here Теперь я переписываю с помощью некоторого кода C# от коллеги, но у меня возникают проблемы с методом парсинга. Вот C# версии:ArrayIndexOutOfBoundsException конвертирование C# в Java
public void parseLine(string _line)
{
if(string.IsNullOrWhiteSpace(_line)){ return;}
code = _line.Substring(0, 3);
ticketID = _line.Substring(3, 10);
string tmp = _line.Substring(13).Trim();
//get the first and last name
string [] tmp1 = tmp.Split(",".ToCharArray());
if(!(tmp1.Length > 1))
{
throw new Exception("unable to get the first and last name");
}
lastname = tmp1[0];
firstname = tmp1[1].Trim();
}
Вот моя версия Java:
public void parseLine(String line) throws Exception {
// code will store Ticket code *Alpha ticketId will store 10
// *digit code
code = line.substring(0, 3);
ticketId = line.substring(3, 10);
// tmp will store everything afterthe first 13 characters of
// line and trim the name(s)
String tmp = line.substring(13).trim();
// tmp1 array
String[] tmp1 = tmp.split(".*,.*");
if (tmp1.length > 1) {
throw new Exception("UNABLE TO GET NAME");
}
last = tmp1[0];
first = tmp1[1].trim();
}
Это в отдельном классе, который будет моделировать людей с билетами. Мой главный класс (до сих пор), который вызывает фактический метод parseLine выглядит следующим образом:
public class ParkingTickets {
public static void main(String[] args) throws
FileNotFoundException, Exception {
ArrayList<TicketPeople> tickets = new ArrayList<>();
HashMap<String, List<SbPeople>> people = new HashMap<>();
File srcFile = new File("source.txt");
Scanner myScanner = new Scanner(srcFile);
while (myScanner.hasNextLine()) {
String line = myScanner.nextLine();
//System.out.println(line);
if (line.matches("^\\p{Alpha}.*$")) {
//System.out.printf("Ticket: %s%n", line);
TicketPeople t = new TicketPeople();
t.parseLine(line);
tickets.add(t);
}
myScanner.close();
}
}
}
точки компилятора в, если заявление в методе parseLine, и, очевидно, метод parseLine в основном классе, когда я попытался пройти через эту строку sepcifiv, я вижу, что он начинает синтаксический анализ данных из исходного файла, но что-то не работает. Из документации ошибка означает: Бросить, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива. Я использовал ArrayList для списка билетов и, насколько я понимаю, это динамический список, который не нужно устанавливать с определенным размером индекса. Я все еще участвую, и мне трудно понять это исключение. Я был бы очень признателен за любую помощь.
# 2 является одной из причин избежать использования '!', Когда есть простой способ свести на нет условие. Версия C# должна быть написана 'if (temp1.Length <= 1)', и тогда было бы намного сложнее сделать эту ошибку. – ajb
Полностью согласовано. – Lekha