如何在Java源代码中搜索字符串并确定它在哪个方法中?
我需要映射在其实现中具有特定字符串的Java源代码的类和方法 在我的真实示例中翻译它:我需要构建一个Java应用程序来扫描Java源文件,搜索特定字符串(例如数据库字段)。在找到这个字符串之后,我需要将它作为在哪个类/方法中找到的输出。因此,如果我有以下代码:如何在Java源代码中搜索字符串并确定它在哪个方法中?,java,Java,我需要映射在其实现中具有特定字符串的Java源代码的类和方法 在我的真实示例中翻译它:我需要构建一个Java应用程序来扫描Java源文件,搜索特定字符串(例如数据库字段)。在找到这个字符串之后,我需要将它作为在哪个类/方法中找到的输出。因此,如果我有以下代码: public class ExampleClass{ public static void main(String args[]) { String url = "hello1"; } publ
public class ExampleClass{
public static void main(String args[]) {
String url = "hello1";
}
public void function1(){
String hello2 = "aaaaaa";
}
}
在这种情况下,如果我搜索
“hello1”
,它应该返回如下内容:ExampleClass.main
。如果我搜索“hello2”
它应该返回:ExampleClass.function1
从您的描述中,首先听起来您可以使用类似于扫描文件的工具。使用此解决方案,您可以扫描所有文件,查找出现的“hello1”
,如果这足以满足您的需要。输出是可定制的。使用grep
在命令行中看起来像这样:
$ grep -r "hello1" /home/user/workspace/project/src
假定/home/user/workspace/project/src
是您的项目源代码根。有一些grep for Windows的实现,只需确保您使用的版本通过r
开关支持递归,而不是所有的实现都支持递归。您还可以使用System.exec
从Java应用程序调用grep
。只需读取结果进程的输出流即可获得结果
但是,如果您确实需要解析源代码,以确保您要查找的表达式是位于正确位置的适当的
字符串文本,那么您可能需要使用如下内容。但是,我认为这可能是对您试图实现的目标的一种过度杀伤力,因为您实际上需要分析整个项目,这是一项相当复杂的工作。如果您需要搜索和浏览源代码,您可以使用OpenGrok
。
您可以使用它从SVN或任何其他存储库浏览源代码。
我们已经在我们的项目中实现了这个Opengrok,它的工作非常完美
或者您可以使用grep
命令从源代码中搜索字符串数据
grep -r /project/src/
此unix命令将递归搜索
希望它能对您有所帮助。您可能需要编写一个解析器和词法分析器来完成这项工作,这两种方法都不能在StackOverflow的一篇文章中教给您。找到一个库,它可以将您的代码分解为AST。你可能可以用谷歌搜索。你真的需要构建一个应用程序,还是可以使用IDE进行交互式搜索?谢谢你的评论,首先,我想逐行分析源代码,并通过类似正则表达式的东西识别方法和类声明。不幸的是,我不能在IDE中这样做,因为我必须对1000多个不同java文件中的1000多个字符串进行分析。你可以使用这些任务。不幸的是,仅仅在源文件中找到字符串的出现是不够的,我真的需要知道字符串是在哪个类/方法中找到的。我查看了EclipseJDT,但我不知道如何使用它来查找特定字符串所属的方法/类的形式。要开始学习,请阅读本教程:-之后,了解如何使用解析类。我将尝试使用OpenGrok,正如我在其wiki中所读到的,似乎可以解决我的问题。不幸的是,grep没有帮助,因为它只找到字符串,但不返回该字符串所属的methdod/类。OpenGrok的设置和索引脚本是为Linux编写的,我需要搜索的源代码在windows计算机上,无法从中提取。