質問編集履歴
1
より詳細が分かるように質問を修正しました。よろしくお願いします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
JavaでコードをString型で読み込み、PatternとMatcherを使ってメソッド名を取得するプログラムを作成しています。
|
3
|
+
JavaでコードをString型で読み込み、PatternとMatcherを使ってそのソースコード内で定義されたreturnを持つメソッド名を取得するプログラムを作成しています。
|
4
4
|
|
5
5
|
正規表現でメソッド名を取得できるようにしたいです。
|
6
6
|
|
@@ -8,13 +8,67 @@
|
|
8
8
|
|
9
9
|
例)
|
10
10
|
|
11
|
-
・
|
11
|
+
・メソッド名を取得するメソッド
|
12
12
|
|
13
|
-
|
13
|
+
/**
|
14
14
|
|
15
|
-
|
15
|
+
* メソッド名の取り出し
|
16
16
|
|
17
|
+
* @param code ソースコード
|
18
|
+
|
19
|
+
* @return methodList メソッド名のリスト
|
20
|
+
|
21
|
+
*/
|
22
|
+
|
23
|
+
public static ArrayList<String> getCheckMethod(String code){
|
24
|
+
|
25
|
+
String word2 = "正規表現";
|
26
|
+
|
27
|
+
Pattern p = Pattern.compile(word2);
|
28
|
+
|
29
|
+
Matcher m = p.matcher(code);
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
ArrayList<String> methodList = new ArrayList<String>();
|
34
|
+
|
35
|
+
while(m.find()){
|
36
|
+
|
37
|
+
String methodName = m.group().toString();
|
38
|
+
|
39
|
+
methodList.add(methodName);
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
System.out.println(methodList);
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
return methodList;
|
48
|
+
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
・読み込んだString型のJavaコード
|
56
|
+
|
57
|
+
public class Test {
|
58
|
+
|
59
|
+
public static String HelloMsg(){
|
60
|
+
|
61
|
+
String msg = "Hello";
|
62
|
+
|
17
|
-
|
63
|
+
return msg;
|
64
|
+
|
65
|
+
}
|
66
|
+
|
67
|
+
public static String morningMsg(){
|
68
|
+
|
69
|
+
return "Goodmornig!";
|
70
|
+
|
71
|
+
}
|
18
72
|
|
19
73
|
}
|
20
74
|
|
@@ -22,7 +76,7 @@
|
|
22
76
|
|
23
77
|
・取得したい部分
|
24
78
|
|
25
|
-
HelloMsg
|
79
|
+
HelloMsg, morningMsg
|
26
80
|
|
27
81
|
|
28
82
|
|
@@ -30,13 +84,17 @@
|
|
30
84
|
|
31
85
|
現段階として、まず上の例で
|
32
86
|
|
33
|
-
|
87
|
+
[ static String HelloMsg(){
|
34
88
|
|
35
|
-
|
89
|
+
String msg = "Hello";
|
36
90
|
|
91
|
+
return,static String morningMsg(){
|
92
|
+
|
37
|
-
|
93
|
+
return]
|
38
94
|
|
39
95
|
までを取得する正規表現を考えているのですが、うまくいきません。
|
96
|
+
|
97
|
+
※[,]はArrayListの標準出力
|
40
98
|
|
41
99
|
|
42
100
|
|
@@ -44,18 +102,44 @@
|
|
44
102
|
|
45
103
|
code: String型のJavaコード
|
46
104
|
|
47
|
-
r
|
105
|
+
word2: 正規表現
|
48
106
|
|
49
|
-
r
|
107
|
+
word2の値で試した方法
|
50
108
|
|
51
|
-
1. .*\\(.*\\)\\s*\\{[\\S\\s]*return
|
109
|
+
1.「 .*\\(.*\\)\\s*\\{[\\S\\s]*return」
|
52
110
|
|
53
|
-
|
111
|
+
・標準出力の結果
|
54
112
|
|
55
|
-
|
113
|
+
[ static String HelloMsg(){
|
56
114
|
|
115
|
+
String msg = "Hello";
|
116
|
+
|
117
|
+
return msg;
|
118
|
+
|
119
|
+
}
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
public static String morningMsg(){
|
124
|
+
|
125
|
+
return]
|
126
|
+
|
127
|
+
・問題点
|
128
|
+
|
57
|
-
|
129
|
+
途中のreturnを飛ばして、一番最後のreturnまでを取得してしまう。
|
58
130
|
|
59
131
|
|
60
132
|
|
133
|
+
2.「 .*\\(.*\\)\\s*\\{[^(return)]*return」
|
134
|
+
|
135
|
+
・標準出力の結果
|
136
|
+
|
61
|
-
r
|
137
|
+
[ static String morningMsg(){
|
138
|
+
|
139
|
+
return]
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
・問題点
|
144
|
+
|
145
|
+
メソッド名の次の行にreturnがないと取得できない(HelloMsgはメソッド名の3行目にreturnが存在)
|