使用Scanner读取java中的.java文件:应用regex将函数调用用作分隔符

使用Scanner读取java中的.java文件:应用regex将函数调用用作分隔符,java,regex,java.util.scanner,regex-negation,Java,Regex,Java.util.scanner,Regex Negation,我正在从事一个项目,该项目涉及读取.java文件并报告代码的各个方面,如函数、行计数和缩进。我想在扫描文件时使用函数声明作为分隔符。为了确定何时调用函数和何时使用条件,我成功地 构建了这个模式。该模式以任意字符序列开头,后跟一对可能包含或不包含文本的括号,后跟一个大括号 scanner.useDelimiter(".*(\\s*)?\\x28.*\\x29(\\s*)?(\\n)?\\x7B"); 这与函数声明相匹配,例如: foo(int n, String w) { foo_bar() {

我正在从事一个项目,该项目涉及读取.java文件并报告代码的各个方面,如函数、行计数和缩进。我想在扫描文件时使用函数声明作为分隔符。为了确定何时调用函数和何时使用条件,我成功地 构建了这个模式。该模式以任意字符序列开头,后跟一对可能包含或不包含文本的括号,后跟一个大括号

scanner.useDelimiter(".*(\\s*)?\\x28.*\\x29(\\s*)?(\\n)?\\x7B");
这与函数声明相匹配,例如:

foo(int n, String w) {
foo_bar() {
或条件句,如

while(foo == null) {
if(i < 10) {
。。。这并不否定条件句

我试过消极的回头看

scanner.useDelimiter("?<!if|while|for|switch|catch)(\\s*)?\\x28.*\\x29(\\s*)?
(\\n)?\\x7B");

scanner.useDelimiter(“?你不是说‘函数声明’,而不是‘函数调用’?可能重复的是,已经更正了。谢谢你指出这一点
scanner.useDelimiter("?<!if|while|for|switch|catch)(\\s*)?\\x28.*\\x29(\\s*)?
(\\n)?\\x7B");