Как избежать ошибку при парсе строки в Long?

273
16 декабря 2017, 06:41

Мне надо просетить данные отеля. Данные хранятся в файле txt, в таком виде:

1001,3,50.0,true,false,13.12.2017,Hotel{id=111111, country='Ukraine', city='Kiev', street='Hrehsatik', name='Sputnik'}

Я считываю файл построчно, разбиваю сплитом по запятым и присваиваю элемент массива объекту. Для того, чтобы просетить своему объекту отель, я сделал отдельный метод поиск отеля по его id. Id отеля лежит в шестой ячейке массива и когда я вставляю эту ячейку как параметр в метод поиска отеля, то выскакивает вот такая ошибка:

Exception in thread "main" java.lang.NumberFormatException: For input string: "Hotel{id=111111"

Как мне это исправить ? Вот часть моего кода:

public static Collection findRooms(Filter filter)throws Exception{
    if (filter == null)
        throw new BadRequestException("This filter - " + filter + " does not exist." );
    LinkedList<Room> rooms = new LinkedList<>();
    LinkedList<Room> roomsFinish = new LinkedList<>();
    DateFormat format = new SimpleDateFormat("dd.MM.yyyy");
    try (BufferedReader br = new BufferedReader(new FileReader(PATH_ROOM_DB))){
        String line;
        while ((line = br.readLine()) != null) {
            String[] fields = line.split(",");
            System.out.println(Arrays.toString(fields));
            Room room = new Room();
            room.setNumberOfGuests(Integer.parseInt(fields[1]));
            room.setPrice(Double.parseDouble(fields[2]));
            room.setBreakfastIncluded(Boolean.parseBoolean(fields[3]));
            room.setPetsAllowed(Boolean.parseBoolean(fields[4]));
            room.setDateAvailableFrom(format.parse(fields[5]));
            System.out.println(fields[6]);
            room.setHotel(findHotelById(Long.parseLong(fields[6])));
            rooms.add(room);
            int index = 0;
            for (Room el : rooms) {
                if (el.getNumberOfGuests() == filter.getNumberOfGuests() || el.getPrice() == filter.getPrice() || el.isBreakfastIncluded() == filter.isBreakfastIncluded()) {
                    if (el.isPetsAllowed() == filter.isPetsAllowed() || el.getDateAvailableFrom() == filter.getDateAvailableFrom()) {
                        roomsFinish.add(el);
                        System.out.println(el);
                       break;
                    }
                }
                index++;
            }
        }
    } catch (FileNotFoundException e){
        throw new FileNotFoundException("File does not exist");
    } catch (IOException e) {
        throw new IOException("Reading from file " + PATH_ROOM_DB + " failed");
    }
    System.out.println(roomsFinish.size());
    return roomsFinish;
}
поделиться|улучшить этот вопрос
    
Сами же пишете, что делаете сплит по запятой. В результате получаете строку Hotel{id=111111. А Long парсится из строки только тогда, когда в этой строке лежит валидный Long и больше ничего. – iksuy вчера
    
Да, я уже понял. Удалил из этой строки буквы, оставил только цифровые символы и заработало. – YuriiS вчера
    
Вопрос этот можно как-то удалить ? – YuriiS вчера

текущие старые голоса

Ваш ответ

StackExchange.ifUsing("editor", function () { StackExchange.using("externalEditor", function () { StackExchange.using("snippets", function () { StackExchange.snippets.init(); }); }); }, "code-snippets"); StackExchange.ready(function() { initTagRenderer("".split(" "), "".split(" ")); StackExchange.using("externalEditor", function() { // Have to fire editor after snippets, if snippets enabled if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using("snippets", function() { createEditor(); }); } else { createEditor(); } }); function createEditor() { StackExchange.prepareEditor({ heartbeatType: 'answer', convertImagesToLinks: false, reputationToPostImages: null, bindNavPrevention: true, postfix: "", onDemand: true, discardSelector: ".discard-answer" ,immediatelyShowMarkdownHelp:true }); } });
 
StackExchange.ready( function () { StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fru.stackoverflow.com%2fquestions%2f758358%2f%25d0%259a%25d0%25b0%25d0%25ba-%25d0%25b8%25d0%25b7%25d0%25b1%25d0%25b5%25d0%25b6%25d0%25b0%25d1%2582%25d1%258c-%25d0%25be%25d1%2588%25d0%25b8%25d0%25b1%25d0%25ba%25d1%2583-%25d0%25bf%25d1%2580%25d0%25b8-%25d0%25bf%25d0%25b0%25d1%2580%25d1%2581%25d0%25b5-%25d1%2581%25d1%2582%25d1%2580%25d0%25be%25d0%25ba%25d0%25b8-%25d0%25b2-long%23new-answer', 'question_page'); } );

Отправить без регистрации

Имя
Почта
отменить

Публикуя ответ вы принимаете условия политики конфиденциальности и соглашение.

Ознакомьтесь с другими вопросами, отмеченными java строки , или задайте свой вопрос.

READ ALSO
Ошибка при отправке имейла из сервлета

Ошибка при отправке имейла из сервлета

Всем привет! Есть небольшая проблема, не отправляется имейл из сервлетаИспользуется java 1

235
REGISTER после INVITE SIP Java

REGISTER после INVITE SIP Java

Каждый раз, когда звоню по SIP через свой сервер, то ловлю INVITE, создаю запрос с полями CSeq, Call-id и тд,и псоле мне нужно отправить инвайт на другой...

193
Split Строка в Java Android

Split Строка в Java Android

По запросу на сервер приходит строка, которую я делю и вывожу на экран:

212
SIP Invalid content length java

SIP Invalid content length java

Все время выбивает при инвайте обратно на пользователя(кинул два метода: форвард - на пользователя, кому звонят, и второй на пользователя,...

179