如何在Java源代码中搜索字符串并确定它在哪个方法中?

如何在Java源代码中搜索字符串并确定它在哪个方法中?,java,Java,我需要映射在其实现中具有特定字符串的Java源代码的类和方法 在我的真实示例中翻译它:我需要构建一个Java应用程序来扫描Java源文件,搜索特定字符串(例如数据库字段)。在找到这个字符串之后,我需要将它作为在哪个类/方法中找到的输出。因此,如果我有以下代码: public class ExampleClass{ public static void main(String args[]) { String url = "hello1"; } publ

我需要映射在其实现中具有特定字符串的Java源代码的类和方法

在我的真实示例中翻译它:我需要构建一个Java应用程序来扫描Java源文件,搜索特定字符串(例如数据库字段)。在找到这个字符串之后,我需要将它作为在哪个类/方法中找到的输出。因此,如果我有以下代码:

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计算机上,无法从中提取。