仕事でjavaのpublicメソッドを抽出するプログラムが必要になりそうなので、書いてみた
Java7のNewIOとJava8のStream関数を使って実装してみる
JavaFileAnalyser.java
package triple;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class JavaFileAnalyser {
private static Pattern PATTERN ;
public static void main(String args[]) throws Exception{
PATTERN = Pattern.compile(".*public(.*)(?:\\s|\\t)(.*)\\((.*)\\).*");
List<String> list = Files.newBufferedReader(
Paths.get("C:/Java/jdk1.8.0_102/src/javax/script/AbstractScriptEngine.java"),
Charset.forName("UTF-8"))
.lines()
.filter(JavaFileAnalyser::isMethod)
.map(JavaFileAnalyser::parse)
.collect(Collectors.toList());
Files.write(Paths.get("C:/Users/****/workspace/FileOpe/result/result.txt"),
list,
Charset.forName("UTF8"),
StandardOpenOption.CREATE);
}
public static boolean isMethod(String str){
if(PATTERN.matcher(str).find()){
return true;
}
return false;
}
public static String parse(String str){
Matcher m = PATTERN.matcher(str);
if(m.find()){
return String.format("戻り値のシグニチャ : %s メソッド名:%s 引数 :%s",m.group(1),m.group(2),m.group(3));
}
return "";
}
}
戻り値のシグニチャ : メソッド名:AbstractScriptEngine 引数 :
戻り値のシグニチャ : AbstractScriptEngine メソッド名: 引数 :Bindings n
戻り値のシグニチャ : void メソッド名:setContext 引数 :ScriptContext ctxt
戻り値のシグニチャ : ScriptContext メソッド名:getContext 引数 :
戻り値のシグニチャ : Bindings メソッド名:getBindings 引数 :int scope
戻り値のシグニチャ : void メソッド名:setBindings 引数 :Bindings bindings, int scope
戻り値のシグニチャ : void メソッド名:put 引数 :String key, Object value
戻り値のシグニチャ : Object メソッド名:get 引数 :String key
戻り値のシグニチャ : Object メソッド名:eval 引数 :Reader reader, Bindings bindings
戻り値のシグニチャ : Object メソッド名:eval 引数 :String script, Bindings bindings
戻り値のシグニチャ : Object メソッド名:eval 引数 :Reader reader
戻り値のシグニチャ : Object メソッド名:eval 引数 :String script
コンストラクタの情報も取得してしまっているようだが、細かいことは気にしないことにする(おい)