Java поиск заменить - PullRequest
       8

Java поиск заменить

1 голос
/ 28 августа 2010

Я хочу сделать поиск и заменить с помощью Java.

У меня есть TreeMap, который содержит имена файлов и их содержимое. У меня есть друг друга TreeMap, который содержит слово и его значение.

Я хочу найти содержимое файла и заменить найденное слово его значением.

Спасибо

P.S .: Это не задание. Я использовал простое чтение файла и функцию замены. Однако мне нужен быстрый способ сделать это. Любой пример кода или исх. будет оценено.

Ответы [ 4 ]

1 голос
/ 28 августа 2010

Позвольте мне дать вам несколько общих советов по разработке, которые помогают, когда проблема огромна.

Прежде всего, запишите список - алгоритм, который, по вашему мнению, решит проблему.В вашем случае попробуйте:

  • для каждого файла в древовидной карте 1
  • для каждой записи в этом файле
  • для каждой строки в текущем файле
  • найдите каждый термин во второй карте дерева
  • для каждого найденного термина, замените его определением.

Теперь перейдите к каждому из этих шагов и улучшите его.Для первого вы должны

  • перебрать список файлов в древовидной карте 1
  • открыть следующий файл
  • начать читать содержимое

Делайте это для каждого шага, который вы в настоящее время не можете себе представить, «Просто кодирование», пока не увидите, как вы будете делать каждый шаг.

Как только вы закончите с этим, я предлагаю написать Очень Базовыйприложение, которое делает одну вещь из вашего списка - например, открыть файл.Здесь очень полезно написать тест junit или написать тест на своей главной странице.Убедитесь, что он открывает файл и может читать из него.

Как только вы достигнете этой точки, продолжайте добавлять к своему коду - просто добавьте немного, затем перекомпилируйте / повторите тестирование.Повторно проверяйте каждую строку , пока вы не закодируете около 5 лет, а затем переходите к каждые 2 или 3 строкам.

Продолжайте обновлять свои тесты для проверки кода.Если вы сломаете старый тест, переписайте его, не выбрасывайте его.

Итерируйте.

Надеюсь, это поможет.

0 голосов
/ 28 августа 2010

Я бы не использовал TreeMap для хранения содержимого всех файлов + .
В любом случае вам необходимо прочитать содержимое, поэтому нет никакого преимущества в первом сохранении всехиз них + .
Читайте один файл за раз, обрабатывайте и сохраняйте его.

Посмотрите на пакет NIO Java.На странице примеров NIO приведен пример поиска в списке файлов (Grep.java).

+ , если не требуется{} в других местах * ** 1 022 * тысяча двадцать три

0 голосов
/ 28 августа 2010

Этот пример будет работать для всех классов, реализующих интерфейс карты, а не только для TreeMap:

public void searchAndReplace(Map<File, byte[]> fileToContentMap, Map<String, String> wordToDefinitionMap) {

    // for each file
    for (File f : fileToContentMap.keySet()) { 
        // get the file's contents
        String contents = new String(fileToContentMap.get(f));

        // replace the contents with definitions
        for (String word : wordToDefinitionMap.keySet()) {
          contents = contents.replaceAll(word, wordToDefinitionMap.get(word));   
        }

        // make sure to update the contents in the array
        fileToContentMap.put(f, contents.getBytes());

        // note, remember to update the physical file as well

    }
}
0 голосов
/ 28 августа 2010

Основами могут быть:

  • цикл по элементу entrySet
  • для каждой записи получить значение
  • Разделить это значение на слова
  • для каждого слова ищите это слово в словаре
  • , если найдено, добавьте это слово к вашему переведенному строителю
  • , иначе добавьте оригинал
  • , добавьте пробел или около того
  • установить значение в записи карты с помощью stringbuilder.toString
...