Kể từ khi tuyên bố của một biến trong Java có thể có nhiều 3 từ trước tên biến, tôi sẽ đề nghị bạn không giới hạn tìm kiếm và sử dụng này:
String var = "private String ipaddress;";
//String var2 = "private static final int test=13;";
Pattern p = Pattern.compile(".+\\s(.+?)(;|=)");
Matcher m = p.matcher(var);
while(m.find()){
System.out.println(m.group(1));
}
Nó sẽ tìm kiếm bất kỳ tên biến bắt đầu với khoảng trắng và kết thúc bằng ";" hoặc "=". Đây là tìm kiếm tổng quát hơn về tên biến.
EDIT Cái này tôi đã suy nghĩ thực sự, vì đây cũng là lời tuyên bố pháp lý trong Java:
private
static
volatile
String
s , t1 = "";
này thực sự có thể được cải thiện có lẽ vì nó đã được thinked/thực hiện nhanh chóng.
public static void main(String[] args) {
String var0 = "private static final int test,test2;";
String var1 = "private \n static \n final \n int \n testName \n =\n 5 \n";
String var2 = "private \n static \n final \n String \n testName \n =\n \" aaa = bbbb \" \n";
String var3 = "private \n static \n final \n String \n testName,testName2 \n =\n \" aaa = bbbb \" \n";
String var4 = "int i;";
String var5 = "String s ;";
String var6 = "final String test ; ";
String var7 = "public int go = 23;";
String var8 = "public static final int value,valu2 ; ";
String var9 = "public static final String t,t1,t2 = \"23\";";
String var10 = "public \n static \n final \n String s1,s2,s3 = \" aaa , bbb, fff, = hhh = , kkk \";";
String var11 = "String myString=\"25\"";
LinkedList<String> input = new LinkedList<String>();
input.add(var0);input.add(var1);input.add(var2);input.add(var3);input.add(var4);input.add(var5);
input.add(var6);input.add(var7);input.add(var8);input.add(var9);input.add(var10);
input.add(var11);
LinkedList<String> result = parametersNames(input);
for(String param: result){
System.out.println(param);
}
}
private static LinkedList<String> parametersNames(LinkedList<String> input){
LinkedList<String> result = new LinkedList<String>();
for(String var: input){
if(var.contains("\n")) var = var.replaceAll("\n", "");
var = var.trim();
if(var.contains("=")){
var = var.substring(0, var.indexOf("=")).trim() + "";
Pattern p = Pattern.compile(".+\\s(.+)$");
Matcher m = p.matcher(var);
if(m.find()){
if(m.group(1).contains(",")){
String [] tokens = m.group(1).split(",");
for(String token : tokens){
result.add(token);
}
} else{
result.add(m.group(1));
}
}
} else{
Pattern p = Pattern.compile(".+\\s(.+?)(;|=)");
Matcher m = p.matcher(var);
if(m.find()){
if(m.group(1).contains(",")){
String [] tokens = m.group(1).split(",");
for(String token : tokens){
result.add(token);
}
} else{
result.add(m.group(1));
}
}
}
}
return result;
}
Chỉ vì tò mò - mặc dù điều đó có thể giúp chúng tôi giúp bạn tốt hơn: trường hợp sử dụng cho điều này là gì? Bạn muốn đạt được điều gì với phân tích cú pháp đó? – Thomas