eclipse - 查找并替换变量名称中的下划线字符
Posted
技术标签:
【中文标题】eclipse - 查找并替换变量名称中的下划线字符【英文标题】:eclipse - find and replace underscore character in variables names 【发布时间】:2011-12-11 21:27:36 【问题描述】:我想要重构变量名称。
variable_foo
到
变量Foo
是否可以使用eclipse的查找/替换工具来做到这一点?
编辑:
我的问题不仅是替换“_”,而是将下一个字母编辑为大写。
可以用正则表达式吗??
【问题讨论】:
将foo
更改为Foo
确实是唯一的问题 - 在我看来,某个地方的一些不起眼的工具支持修改替换表达式中的匹配,但我不能记住它是什么手头......
【参考方案1】:
在 Eclipse Marketplace 中有一个名为 AnyEditTools 的插件,它添加了一堆转换选项,其中一个是 from/to camelCase
和 underscore_names
(Alt+Ctrl+K
)。
但是,Eclipse 的 Java 编辑器当前 (Indigo) 在 identifiers_with_underscores
中缺乏正确的导航 - 它仅适用于 CONSTANT_NAMES_CURRENTLY
。 (详情请看:https://bugs.eclipse.org/bugs/show_bug.cgi?id=67381)
【讨论】:
【参考方案2】:这些链接
http://www.php.net/manual/en/function.preg-replace.php#89364
http://www.blog.highub.com/regular-expression/perl-regex/perl-regex-capitalize-the-first-letter-of-a-word/
似乎表明 Perl 和/或 PHP 正则表达式语法支持 \u 运算符,该运算符将替换表达式中的匹配项大写 - 我认为我将其解释为来自 'vi' 的保留(UNIX文本编辑器) - 不知道为什么它似乎不存在于更现代和流行的正则表达式实现中
因此,如果您可以将代码放到支持适当版本的 vi(或完全支持这种 perl 语法的编辑器)的系统上,然后弄清楚如何在其中打开文档,如何运行 find -replace 等。那么您必须使用如下表达式:
/\b(\w+?)_(\w+)/$1\u$2/
或
find: \b(\w+?)_(\w+)
replace: $1\u$2
【讨论】:
【参考方案3】:是的,你可以这样做:
find : (.*)_(.)(.*)
replace : $1\C$2$3
这应该可以解决问题
【讨论】:
好的@皮埃尔实验室。但是像 _foo_bar 这样的变量应该替换为 _fooBar。我试过 (.+)_(.)(.*) 但不起作用。而且_后面的字母不是大写的。 我的错,我认为 \C 会起作用。对于 _foo bar 的情况,这不是你的问题......无论如何,你想要做的可能需要外部脚本语言(例如 python)【参考方案4】:如果我理解正确,您希望找到后跟小写字符的任何 vunderscore 并将其替换为该字符的大写版本,即 var_foo -> var Foo, _bar_baz -> _barBaz 等等。
不幸的是,Eclipse 似乎无法提供这一点,因为正如其他人已经说过的那样,您可以使用 Ctrl+H(或单个文件中的 Ctrl+F)和正则表达式来查找那些下划线 + 字符,但是正则表达式不提供转换匹配的工具(例如小写到大写)。
您可以做的最好的事情是使用正则表达式找到这些变量,然后按照您想要的方式重构它们,例如使用这样的表达式搜索:\w_\w
应该找到 var_foo、bar1_baz 而不是 _bar,标记它们并重命名 (Alt + LShift + R)。
请注意以下几点:\w_\w
也可以找到方法、cmets 等,因为搜索不知道它实际找到了什么(是否是变量、类名、方法等)。
【讨论】:
【参考方案5】:查找和替换的问题在于它不支持 AST,因此即使您可以使用引用并将其大写,它也会在整个文件中执行此操作,而不仅仅是变量。
IMO 你最好找到变量并使用“重命名变量”重构重命名它们,这也将正确处理 getter/setter 重命名(如果适用)等等,而不是依赖于(相对无知的)搜索- 并替换。
【讨论】:
【参考方案6】:也许不是您正在寻找的答案,但对于所有这些类型的查找/替换任务,我使用 Notepad++。我在 Eclipse 中编写代码,并在 Notepad++ 中对我的源代码进行批量查找/替换。
【讨论】:
以上是关于eclipse - 查找并替换变量名称中的下划线字符的主要内容,如果未能解决你的问题,请参考以下文章