0

假设您有一个 Java 文件,其中包含许多单字母变量名称,例如 a、x、f 等,并且您想将它们更改为更有意义的名称。您可以尝试将每次出现的 'f' 替换为 'filename',但这会弄乱单词中出现 'f' 的所有位置(例如在关键字 if 中)。您将如何使用正则表达式搜索和替换来纠正这个问题?

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

4

3 回答 3

0

这是基于此问题的答案:

  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。现在系统会提示您输入要替换的内容 - 输入 eg \bf\b。接下来,输入替换,例如filename
  7. 现在,Emacs 将引导您了解\bm\b所有 java 文件中出现的所有情况。您必须每次都输入SPC以接受或n跳过当前实例。通过键入 替换时,您可以看到所有选项?
  8. 最后,C-x s.
于 2013-07-22T06:37:13.267 回答
0

\bj\b 应该找到字母 i 的位置。因此,b 之间的任何约束都是要找到的字符。

于 2013-08-05T02:30:36.480 回答
0

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

需要注意的是,这些变量不能从多个源文件中使用,否则你会搞砸的。

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

于 2013-07-21T23:46:04.987 回答