代碼:
package findJavaMemberFunction; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 查找一個Java源文件中的成員函數名 * */ public class FindFunctionNames { public static void main(String[] args) { try { // (\\s+):group(2) 匹配一個或多個空格 // (\\S+):group(3) 匹配返回值如void,String // (\\s+):group(4) 匹配一個或多個空格 // ([_a-zA-Z]+[_a-zA-Z0-9]*):group(5) 匹配函數名 // ([(]([^()]*)[)]):group(1) 匹配函數的參數 java.util.regex.Pattern pattern=Pattern.compile("(\\s+)(public|protected|private|static)(\\s+)(\\S+)(\\s+)([_a-zA-Z]+[_a-zA-Z0-9]*)([(]([^()]*)[)])"); List<String> list=new ArrayList<String>(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\logs\\Json.java"), "UTF-8")); String line = null; int lineIndex=0; while( ( line = br.readLine() ) != null ) { lineIndex++; Matcher matcher=pattern.matcher(line); while(matcher.find()) { System.out.println("Line " + lineIndex +":" + matcher.group(6)+ matcher.group(7)); } list.add(line); } br.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
輸出:
Line 58:getValueList() Line 62:addJsonToList(Json json) Line 71:addJsonToArray(Json json) Line 79:adjustDepth() Line 97:toString() Line 152:compareTo(Json other) Line 156:getIndentSpace() Line 160:getKey() Line 164:setKey(String key) Line 168:getParent() Line 172:setParent(Json parent) Line 176:main(String[] args)
測試文件:
1 package com.hy; 2 3 import java.util.Collections; 4 import java.util.LinkedList; 5 import java.util.List; 6 7 /** 8 * Json對象類 9 * @author 逆火 10 * 11 * 2019年12月2日 下午8:17:06 12 */ 13 public class Json implements Comparable<Json>{ 14 15 // There are value types 16 public static final int Type_String=1; 17 public static final int Type_Array=2; 18 public static final int Type_List=3; 19 20 // Key always is String 21 private String key; 22 private Json parent; 23 24 // There are three types of value 25 private int valueType; 26 private String valueString; 27 private List<Json> valueList; 28 29 // indent depth 30 private int depth; 31 32 public Json() { 33 34 } 35 36 /** 37 * Contructor1 38 */ 39 public Json(String key,String value) { 40 this.key=key; 41 this.valueType=Type_String; 42 this.valueString=value; 43 this.depth=0; 44 } 45 46 public Json(String key,int type) { 47 this.key=key; 48 49 if(type==Type_List) { 50 this.valueType=Type_List; 51 this.valueList=new LinkedList<Json>(); 52 }else if(type==Type_Array) { 53 this.valueType=Type_Array; 54 this.valueList=new LinkedList<Json>(); 55 } 56 } 57 58 public List<Json> getValueList() { 59 return valueList; 60 } 61 62 public void addJsonToList(Json json) { 63 if(valueList!=null) { 64 valueList.add(json); 65 json.parent=this; 66 67 adjustDepth(); 68 } 69 } 70 71 public void addJsonToArray(Json json) { 72 if(valueList!=null) { 73 valueList.add(json); 74 json.parent=this; 75 adjustDepth(); 76 } 77 } 78 79 private void adjustDepth() { 80 if(valueType==Type_List) { 81 for(Json json:valueList) { 82 json.depth=this.depth+1; 83 json.adjustDepth(); 84 } 85 86 87 } 88 89 if(valueType==Type_Array) { 90 for(Json json:valueList) { 91 json.depth=this.depth+1; 92 json.adjustDepth(); 93 } 94 } 95 } 96 97 public String toString() { 98 StringBuilder sb=new StringBuilder(); 99 100 // key 101 String tabs=getIndentSpace(); 102 sb.append(tabs); 103 //sb.append("\""+(key==null?"":key)+"\""); 104 105 if(key!=null) { 106 //sb.append("\""+key+"\"");// 以對象構建時恢復 107 sb.append(key);// 以文件構建時打開 108 sb.append(":"); 109 }else { 110 111 } 112 113 // value 114 if(valueType==Type_String) { 115 //sb.append("\""+valueString+"\"");// 以對象構建時恢復 116 sb.append(valueString);// 以文件構建時打開 117 }else if(valueType==Type_Array) { 118 sb.append("[\n"); 119 120 int n=valueList.size(); 121 for(int i=0;i<n;i++) { 122 Json json=valueList.get(i); 123 if(i!=n-1) { 124 sb.append(json.toString()+",\n"); 125 }else { 126 sb.append(json.toString()+"\n"); 127 } 128 } 129 130 sb.append(tabs+"]"); 131 }else if(valueType==Type_List) { 132 sb.append("{\n"); 133 134 Collections.sort(valueList); 135 136 int n=valueList.size(); 137 for(int i=0;i<n;i++) { 138 Json json=valueList.get(i); 139 if(i!=n-1) { 140 sb.append(json.toString()+",\n"); 141 }else { 142 sb.append(json.toString()+"\n"); 143 } 144 } 145 146 sb.append(tabs+"}"); 147 } 148 149 return sb.toString(); 150 } 151 152 public int compareTo(Json other) { 153 return this.key.compareTo(other.key); 154 } 155 156 private String getIndentSpace() { 157 return String.join("", Collections.nCopies(this.depth, " ")); 158 } 159 160 public String getKey() { 161 return key; 162 } 163 164 public void setKey(String key) { 165 this.key = key; 166 } 167 168 public Json getParent() { 169 return parent; 170 } 171 172 public void setParent(Json parent) { 173 this.parent = parent; 174 } 175 176 public static void main(String[] args) { 177 Json id1=new Json("id","001"); 178 Json name1=new Json("name","鐧借彍"); 179 180 Json title=new Json("title",3); 181 title.addJsonToList(id1); 182 title.addJsonToList(name1); 183 184 Json empty1=new Json(null,3); 185 empty1.addJsonToList(new Json("id","001")); 186 empty1.addJsonToList(new Json("id","浣犲ソ鐧借彍")); 187 188 Json empty2=new Json(null,3); 189 empty2.addJsonToList(new Json("id","001")); 190 empty2.addJsonToList(new Json("id","浣犲ソ钀濆崪")); 191 192 Json content=new Json("content",2); 193 content.addJsonToArray(empty1); 194 content.addJsonToArray(empty2); 195 196 Json data=new Json("data",3); 197 data.addJsonToList(title); 198 data.addJsonToList(content); 199 200 Json status=new Json("status","0000"); 201 Json message=new Json("message","success"); 202 203 Json root=new Json(null,3); 204 root.addJsonToList(status); 205 root.addJsonToList(message); 206 root.addJsonToList(data); 207 208 System.out.println(root.toString()); 209 } 210 }
--END-- 2019年11月30日17:42:48