1

我想在java的帮助下进行搜索和替换。

我有包含文件名及其内容的 TreeMap。我有另一个包含单词及其含义的 TreeMap。

我想搜索文件内容并将找到的单词替换为其含义。

谢谢

PS:这不是作业。我使用了简单的读取文件和替换功能。但是,我需要快速的方法来做到这一点。任何示例代码或参考。将不胜感激。

4

4 回答 4

1

让我给你一些通用的开发建议,在遇到问题时会有所帮助。

首先,写下一个列表——一个你认为能解决问题的算法。在你的情况下尝试:

  • 对于树形图 1 中的每个文件
  • 对于该文件中的每个条目
  • 对于当前文件中的每一行
  • 在第二个树形图中搜索每个词
  • 对于每个找到的术语,用定义替换。

现在,进入这些步骤中的每一个并增强它。对于第一个你应该

  • 遍历树形图 1 中的文件列表
  • 打开下一个文件
  • 开始阅读内容

对您目前无法设想的“仅编码”的每个步骤执行此操作,直到您可以看到您将如何执行每个步骤。

完成此操作后,我建议编写一个非常基本的应用程序,该应用程序执行列表中的一件事——例如,打开一个文件。在这里编写一个junit测试或在你的main中编写一个测试非常有帮助。确保它打开文件并可以从中读取。

一旦你在这一点上,继续添加到你的代码中——只需添加一点然后重新编译/重新测试。重新测试每一行,直到你编码了 5 年,然后每 2 或 3 行进行一次。

不断更新您的测试以测试您的代码。如果你打破旧测试重写它,不要把它扔掉。

迭代。

我希望这有帮助。

于 2010-08-27T22:08:33.877 回答
0

基础可以是:

  • 遍历 entrySet
  • 为每个条目获取值
  • 将该值拆分为单词
  • 对于每个单词在字典中查找该单词
  • 如果找到该词添加到您翻译的字符串生成器
  • 否则添加原件
  • 添加空间左右
  • 使用 stringbuilder.toString 在地图条目上设置值
于 2010-08-27T22:06:52.883 回答
0

这个例子适用于所有实现 map 接口的类,而不仅仅是 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

    }
}
于 2010-08-27T22:39:16.957 回答
0

我不会使用 TreeMap 来存储所有文件+的内容。
无论如何您都需要阅读内容,因此首先存储所有内容没有优势+
一次读取一个文件,处理并保存。

看看Java的NIO包。在NIO 示例页面上有一个在文件列表中搜索的示例 (Grep.java)。

+ 如果不需要{其他地方}

于 2010-08-27T22:51:29.560 回答