Спасибо за иконку! Заинтересовался, что за она, посмотрел адрес — и открыл для себя новый сервис гугла :)
(А на хабре о нём рассказывали ровно год назад.)
Спасибо за иконку! Заинтересовался, что за она, посмотрел адрес — и открыл для себя новый сервис гугла :)
(А на хабре о нём рассказывали ровно год назад.)
OMG! text.indexOf()? Почему не регекспы? Или почему не DOM?
Мне приходилось решать такую задачу (и прокси парсил, и сайты) — очень помог jTity, код получается проще и понятнее чем на регэкспах. И уж точно проще и понятнее, чем такой вот странный разбор строк.
Вообще говоря код даже получился очень даже не очень… st.close(); и conn.close(); принято делать в finally, и это неспроста так принято ;). Присвоения в условиях типа while ((line = reader.readLine()) != null) тоже обычно не приветствуются. Функция removeChar() написана крайне странно. Почему не foreach? И почему е используется StringBuilder/StringBuffer, ведь насколько я понимаю в данном случае ничего компилятором оптимизировано не будет, и на каждую итерацию будет создаваться новый объект String! Это я уже молчу про то, что можно просто .replace() сделать. PreparedStatement'ы где? Ну я понимаю что код «для себя», но все равно, какой смысл приучаться делать неправильно?!
В основном потому, что если условие будет немного сложнее != null, то момент присвоения может зрительно потеряться. Или еще хуже — если глядя на чужой код будет неясно, опечатка это (должно быть сравнение) или так и задумано? В данном случае — да, сэкономили строчку (надо было бы делать присвоение и до цикла, и внутри него), но я стараюсь так не писать.
Ясно, вашу точку зрения понял и с ней согласен. Но сам иногда использую такой подход, разумеется когда условие простое, например != -1 (для чтения из потоков в основном) ну или же как в этом примере.
А зачем ты всегда загоняешь null в переменную, которая и так null? =)
// String host = null;
// String port = null;
Не критично конечно, просто сразу в глаза бросилось, потеря времени только имхо.
Ну и всегда приятней работать с нормальными объектами, вместо того чтобы обрабатывать поток символов.
В частности, выгрузить табличку и ходить по её полям. simple.sourceforge.net/ xstream.codehaus.org/
«А зачем ты всегда загоняешь null в переменную, которая и так null? =)
// String host = null;
// String port = null;»
Тут вы ошибаетесь. Конструкция String host; внутри метода (не как параметр класса) даст ошибку при обращении к ней — 'переменная 'host' не инициализирована'
Ок, поспешил с утра, но он всё равно загоняет в неё содержимое позже, дк зачем её нулём инициализировать в начале?
Естественно, что он её инициализирует чемнить перед тем, как в метод загонять.
// String host = null;
// host = text.substring(cursor, text.indexOf("<script type=\«text/javascript\»>", cursor));
// System.out.println(«Added: „+host+“:»+port);
Ничего себе… какой у вас велосипед. Таким не стоит хвастаться. Модели нет, парсинг просто ужас. Представьте на секунду, что структура HTML изменится, придется все переделывать.
HTML это производная XML, а это значит что его можно разпарсить инструментами разработанными для этого. К примеру JDOM.
Пишем парсер на Java + MySQL