![]() |
Нужна помощь.Ява.
Здрастуйте.
Вот есть файл,текстовый,там много слов,в столбик,мне надо написать программку ,которая читает строки из этого файла и записывает в другой,но в первом файле есть повторения,а мне они не нужны,как это реализовать????я вроде написал программку,но она не правильно работает,пишет такой же файл как и первый.Вот код import java.io.*; class Slovar { public static void main(String args[]) throws Exception { FileWriter fw = new FileWriter("slovarik-final.txt"); FileReader fr = new FileReader("C:/JBuilder8/samples/Welcome/slovar.txt"); BufferedReader br = new BufferedReader(fr); FileReader fr2 = new FileReader("C:/JBuilder8/samples/Welcome/slovarik-final.txt"); BufferedReader br2 = new BufferedReader(fr2); String str = br.readLine(); String str2; int i=0; while((str=br.readLine())!=null) { do { str2=br2.readLine(); if(str.equals(str2)) { i=1; } } while((br2.readLine())!=null); if(i==0); fw.write(str+'\n'); } fw.close(); } } |
Несколько мыслей:
1) Сортируешь первый файл и при сохранении во второй сравниваешь соседние слова и не сохраняешь одинаковые (долго). (Возможно есть сортировки, предусматривающе исключение повторов) 2) Создаешь числовой массив. Берешь первое слово, нумеруешь его как 1, сравниваешь с другими, одинаковые - тоже 1, второе - с третьим и далее. Потом пробегаешь по массиву и выбираешь строки с последовательными номерами. (нужен массив, но побыстрее) --- Пока больше ничего на ум не пришло. |
Сортировка невозможна,4 миллиона слов сортировать памяти не хватит,я пробовал.Насчет массива надо попробовать.
|
4 миллиона DWORDов ~ 15 Mb.
3) Берешь первое слово, пробегаешь с ним по всему списку, удаляя дубли. Далее второе и т.д. |
не 4 миллиона это 50 мегов,а вот как удалять дубли???я не знаю этого метода(функции)
|
Цитата:
java.util.* -- Есть богатый набор классов для работы с коллекциями. Среди них есть классы поддерживающие хэш и деревья. Кроме того имеются даже классы с сохранением порядка добавления элементов. Хэш и дерево (есть ещё множество -- Set) не допускают наличия двух одинаковых элементов -- как раз что тебе нужно! Просто при чтении файла добавляешь всё в коллекцию, а потом пробегаешь её итератором и скидываешь всё в выходной файл. В зависимости от выбранного класса будет различатся скорость добавления элемента и сканирования коллекции. Дерево выглядит наиболее подходящим + получишь отсортированный словарь. |
aleh
Спасибо за помощь,вот только одно,у меня JBuilder выдает ошибку java.lang.outofmemory .что делать???Рам у меня 256 мегов.Виндовс 98 СЕ. |
Oracul
1) Увеличь swap (не более 200-300 Мб) 2) Выкинь из памяти всякую муть. 3) Зарежь память самому JBuilder-у (это сложный вопрос, нужно в его личном JSDK добавить параметр -Xm128, кажется) 4) Запускай программу при выгруженном JBuilder (но это только для большх проектов. Хотя запуск твоей проги приведёт к лишним 16-32 Мб -- отдельный экземпляр java + куча вспомогательных классов и твоя программа) 5) Смени JBuilder на что попроще. P.S. Трудно поставить диагноз заочно... |
aleh
IntelliJ IDEA пойдет?? |
Oracul
Более чем. Это достаточно лёгкий пакет, а главное очень красивый и в нём есть куча полезных опций -- встроенный versioning, refactoring и проверка на явные ошибки. Я мучал Intellij IDEA 3.0.4 -- :yees: |
Большое спасибо за помощь.aleh а в 98 виндовсе на каждую прогу случайно не выделяеться определенное кол-во памяти и времени процессора?
|
Oracul
Да незачто. В 98-х время делится между процессами примерно в равной мере (если они не хотят делиться). А память выделяется сколько надо пока она есть. Под памятью понимается вся RAM (кроме ядра) и виртуальная (swap). Отличие от NT в том, что в 98 память задачи не защищена от других задач (если что-то начинает выпендриваться, то с лёгкостью завалит всю машину). Java при запуске любит создавать отдельный экземпляр для каждой своей программы. При этом загружаются базовые и вспомогательные классы (где-то 8-32 Мб в зависимости от использования пакетов и java-программы). Поэтому три параллельно запущенных java-приложения обычно запускаются в своей java-песочнице (контейнере). Таким образом съедается драгоценная память (это вам не Perl). Можно запускать всё в одном экземпляре JRE, но тогда снижается надёжность (что-то типа аналога различия NT и 98). В случае средств разработки IDE (JBuilder) и приложение мало того что запускаются в различных JRE, так эти JRE могут иметь разные версии (и даже располагаться на различных компьютерах). Такие пакеты как Oracle 9 для надёжности запускают экземпляр JRE (когда нужно) на каждого пользователя -- память при этом кончается очень быстро. P.S. Для нормальной разработки приложений нужно *** Мб RAM: простое -- 256 Мб J2EE без бызы данных (IDE + разрабатываемая программа) -- 512 Мб J2EE (AppServer) + DB (Oracle 9) + IDE (всё запускается на одном PC) -- 768/1024 Мб Вот откуда взялось выражение "Жava давит" :smile: . Цифры вполне реальные. Как-то пробовал написать простой пример для J2EE SDK на 128 Мб -- ждал по 5-10 минут только чтобы прошёл Deploy (После этого купил себе домой PC c 512 RAM на борту). "Java очень любит RAM. Отчего и почему сам я толком не пойму." :) |
Я еще новичок,и только только изучил Яву,и поэтому немного знаю.Не мог бы ты обьяснить,чем отличаеться ЕЕ от SE ,всмысле,что есть в ЕЕ чего нету в SE и что такое база данных,что в ней содержиться,и зачем нужно с ней работать?на примере Oracle 9
|
Oracul
Эх... В мире Java существует 3-ри направления ME, SE и EE -- соответственно Micro, Standard и Enterprise Edition. Стандартная редакия скорее является маин-стреам. Микро редакция это для маленьких устройств (мобильник, стиральная машина...) а EE вариант просто сверх навороченная добавка поверх SE (в последнее время становиться всё толще и толще). Обычно SE связывают с клиентскими приложениями (Swing, Applet...) а EE с такими *страшными* словами как Application Server, JSP, EJB (BMP, CMP)... http://ru.sun.com/win/java/ База данных. Есть данные, их нужно где-то хранить. Мало того что их надо где-то хранить, так с ними нужно ещё и работать -- выборка, поиск, обновление... Вот для этого и существуют базы дынных (DataBase - DB, RDBMS). Кстати, если нужна DB, то не обезательно сразу начинать с Oracle -- это база данных для профессионального использования (хотя скорее уровня предприятия). Не так давно произошло слияние SAP DB и MySQL -- версии к 5-ой MySQL превратится во вполне серёзную базу данных (но будет куда легче Oracle). Ещё существует PointBase (www.pointbase.com) -- DB 100% на Java. В самом скромном случае можно использовать тот-же Access или даже Excel (через JDBC-ODBC порт). P.S. SE + Tomcat (JSP) = лёгкий вариант для EE приложений. Совсем НЕ обязательно использовать самые последние и модные слова. ПО должно отвечать своему назначению а не веяниям моды и амбициям разработчика/менеджера. |
Цитата:
Это то я все понимаю,у меня вопрос в другом,что представляют из себя базы данных??? |
Oracul
Есть два основных варианта (есть ещё, но это либо старо либо специфично): * Реляционные (RDBMS) -- куча таблиц с записями (фиксированный набор полей) * Объектные -- в чистом виде мало, иногда применяется как надстройка над реляционными (JDO) Основная масса приложений использует RDBMS (MySQL, Oracle, SAP DB, MS SQL Server, Access, PointBase...) Проще изучи SQL-92 и тебе станет понятно что есть база данных. Или сформулируй вопрос по другому, более конкретно (лучше создать или найди соответствующий топик** ). |
Ок,спасибо,изучу,я тут задался целью изучиться все что связано с Явой:biggrin:
|
| Часовой пояс GMT +4, время: 11:37. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.