質問編集履歴

1

より詳細が分かるように質問を修正しました。よろしくお願いします。

2016/10/13 02:55

投稿

Matt
Matt

スコア41

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
- 読み込んだString型のJavaコーの一部
11
+ メソッ名を取得するメソッド
12
12
 
13
- public static String HelloMsg(){
13
+ /**
14
14
 
15
- String msg = "Hello";
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
- return msg;
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
- public static String HelloMsg(){
87
+ [ static String HelloMsg(){
34
88
 
35
- String msg = "Hello";
89
+ String msg = "Hello";
36
90
 
91
+ return,static String morningMsg(){
92
+
37
- return
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
- regex: 正規表現
105
+ word2: 正規表現
48
106
 
49
- regexの値で試した方法
107
+ word2の値で試した方法
50
108
 
51
- 1. .*\\(.*\\)\\s*\\{[\\S\\s]*return
109
+ 1. .*\\(.*\\)\\s*\\{[\\S\\s]*return
52
110
 
53
- 2. .*\\(.*\\)\\s*\\{[^(return)]*return
111
+ ・標準出力の結果
54
112
 
55
- Pattern p = Pattern.compile(regex).matcher(code);
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
- regexの正規表現について、ご助言頂ければ幸いです。
137
+ [ static String morningMsg(){
138
+
139
+ return]
140
+
141
+
142
+
143
+ ・問題点
144
+
145
+ メソッド名の次の行にreturnがないと取得できない(HelloMsgはメソッド名の3行目にreturnが存在)