| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > equal не срабатывает на одинаковых строках |
| Автор: Connie 8.10.2008, 19:15 | ||||
| Есть файл в UTF8, я читаю из него построчно. Если первая строка такая <MENU> то начинается дальнейшая обработка. Все вроде бы просто, надо сравнить первую строк со строковой константой Вот код
А вот вывод
|
| Автор: polosatij 8.10.2008, 20:51 |
ню ты намутил(а) в первой строчке, возможно, ещё и \n, то есть переход на новую строку, посему результат и +1.. |
| Автор: Connie 8.10.2008, 22:05 | ||||
| polosatij, Хорошо, пробуем так
на всякий случай прилагаю этот файл. Нет там никакого переноса |
| Автор: polosatij 8.10.2008, 23:41 | ||
ню.. логично всё.. у тебя ведь перенос не в начале, а в конце
|
| Автор: redrick 9.10.2008, 00:18 |
| Bug ID: 4508058 =) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 сталобыть скипать надо первые 3 байта |
| Автор: Connie 9.10.2008, 11:43 | ||
| polosatij, http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
redrick, я в принципе и пошел по этому пути, не стал так сравнивать line.equals("<MENU>"), а вместо этого line.contains("<MENU>") Я так и предположил, что это какой то глюк в распозновании UTF, спасибо за ссылку |
| Автор: SoulKeeper 9.10.2008, 12:21 | ||
Для чего вообще в UTF-8 BOM пихать? |
| Автор: redrick 9.10.2008, 13:00 | ||
| SoulKeeper, вот вроде оттудаже:
типа просто маркер что файл UTF-8. Судя по всему это косяк который сделали и теперь не правят, т.к. боятся что у всех все сломается(баг 2001 года). С другой стороны стандарту 100 лет и здесь сановцы просто налажали. |
| Автор: Alexander1966 10.10.2008, 13:09 | ||
| Странно, у меня все верно проверяет. Для: wwweeeee <MENU> wwwwwwwww выдает: no yes no
|
| Автор: alexadr 10.10.2008, 13:31 | ||
| Alexander1966, а попробуй для вот такого контента файла UTF8 с BOM:
|
| Автор: redrick 10.10.2008, 15:08 |
| Alexander1966, просто файл у вас видимо без BOMа как сказал alexadr посмотрите хексэдитором |
| Автор: Connie 11.10.2008, 07:10 | ||
Alexander1966,
В том и проблема, что сравнение не проходит, если <MENU> в первой строчке, а оно только там и должно быть, структура файла такая, если в первой строчке нет этой записи, то значит это не тот файл и дальнейшая обработка не производится. Попробуйте сделать сравнение line.equals("wwweeeee") так, что бы wwweeeee эта строчка была первой. Там далее в файле есть еще одна похожая строчка <DATA> так вот с ней сравнение проходит. При этом надо помнить, что формат того файла я поменять никак не смогу, т.к. он делается другой программой, т.е. работаю с тем, что есть. Но впрочем я решение нашел, я написал выше, оно меня устраивает |
| Автор: ecologist 11.10.2008, 13:15 |
| А почему исполь зуется FileStream - он же для побайтного считывания ? Может лучше FileReader ? Я что-то не припомню таких проблем в этом случае. |
| Автор: Connie 11.10.2008, 18:13 |
| ecologist, потому что нужно сделать конверсию UTF8, а уже поверх этого используется BufferedReader, а он то читает построчно. |
| Автор: Alexander1966 14.10.2008, 16:52 |
| Работает и с первой строчкой. Файл создаю в ASPLinux. Midnight Commander Locale=UTF-8.RU без BOM - это точно |
| Автор: alexadr 15.10.2008, 21:56 |
| Alexander1966, ну вот потому что он без BOM и все работает |