使用Emacs和正则表达式搜索和替换Java源文件中的字符串

时间:2013-07-21 23:35:58

标签: regex emacs

假设您有一个包含许多单字母变量名称的Java文件 a,x,f等,你想把它们改成更有意义的东西。你可以试试 用'filename'替换'f'的每一个出现,但这会弄乱所有的地方 其中'f'出现在单词内(例如在关键字if中)。你会怎么样? 使用正则表达式搜索和替换纠正此问题?

我需要在Emacs中使用单词边界来编写它。由于我是新手,使用Matcher Class是否适用?

3 个答案:

答案 0 :(得分:0)

如果您必须使用原生emacs执行此操作: 字边界是一个合理的搜索边界。 Matcher类是Java构造。如果您正在编写代码来执行搜索和替换。由于您在emacs中完全执行此操作,因此不适用。

有一点需要注意,这些变量不能在多个源文件中使用,否则你会搞砸。

我不会用原始emacs这样做。我使用IDE重构工具。 Emacs甚至可以安装Java Refactoring。使用重构工具,该工具可以理解语法,并且比正则表达式更具体。

答案 1 :(得分:0)

以下是基于此question的答案:

  1. 在使用任何工具执行此类操作之前,版本控制一切。我推荐git
  2. M-x find-name-dired
  3. 输入项目根目录的路径,例如~/Dropbox/source/java/
  4. 输入java文件通配符:*.java。 您最终会在dired缓冲区中包含项目根目录中的所有java文件。
  5. t - 这将标记dired中的所有文件。这意味着他们将成为目标 下一步行动。
  6. Q - 这会调用dired-do-query-replace-regexp。 现在,系统会提示您输入要替换的内容 - 例如输入\bf\b。 接下来,输入替换例如filename
  7. 现在,Emacs会引导您查看所有java文件中出现的所有\bm\b。 每次要接受 SPC 接受或 n 要跳过 当前的实例。通过键入
  8. ,您可以在更换时看到所有选项
  9. 最后, C-x s

答案 2 :(得分:0)

\ bj \ b其中应该找到字母i。因此,b之间的任何约束都是要找到的角色。