雖然試圖獲得matcher.group()作爲字符串,它告訴它的不可用。爲什麼?Matcher.group()聲明的局部變量不可用
CODE:
private static ArrayList<String> validateList(List<String> listToProcess) {
List<String> resultTemp = new ArrayList<String>();
boolean listIsCorrectlyFormatted = true;
String pattern = "";
pattern = "(\\s)*(\\w\\w(\\w)*)((\\s)(\\w|-|\\.)+)?(((\\s)+|(\\s)+(,)*(\\s)*|(,)(\\s)*)+(\\+(\\d)+)+)?(((\\s)+|(\\s)+(,)*(\\s)*|(,)(\\s)*)+(\\w)+(\\w|\\s|-|,)*[^\\)|^\\(])?(((\\s)+|(\\s)+(,)*(\\s)*|(,)(\\s)*)+\\((\\w)+(\\w|\\s|-|,)*\\))?(\\s)*";
// (\s)*(\w\w(\w)*)((\s)(\w|-|\.)+)?(((\s)+|(\s)+(,)*(\s)*|(,)(\s)*)+(\+(\d)+)+)?(((\s)+|(\s)+(,)*(\s)*|(,)(\s)*)+(\w)+(\w|\s|-|,)*[^\)|^\(])?(((\s)+|(\s)+(,)*(\s)*|(,)(\s)*)+\((\w)+(\w|\s|-|,)*\))?(\s)*
String nameP = "(\\w\\w(\\w)*)((\\s)(\\w|-|\\.)+)?";
String plussP = "(\\+(\\d)+)+";
String commentP = "((\\w)+(\\w|\\s|-|,)*[^\\)|^\\(])|(\\((\\w)+(\\w|\\s|-|,)*\\))";
String tmpStr = "";
int counter = 1;
Matcher matcher;
Pattern generalPt = Pattern.compile(pattern);
Pattern otherPattern = Pattern.compile(""); // *
for (String str : listToProcess) {
if (generalPt.matcher(str).find()) {
// OK
System.out.println("#"+counter+" :: OK ``"+str+"``");
otherPattern = Pattern.compile(nameP); // name
matcher = otherPattern.matcher(str);
matcher.find();
tmpStr += matcher.group(); // name
System.out.println("@[email protected]"+matcher.group()+"@");
// -----------------------------------------------------
matcher.reset();
otherPattern = Pattern.compile(plussP); // plus
matcher = otherPattern.matcher(str);
matcher.find();
tmpMatcherGroup = matcher.group();
tmpStr += tmpMatcherGroup;
System.out.println("@[email protected]"+tmpMatcherGroup+"@");
//--------------------------------------------------
matcher.reset();
otherPattern = Pattern.compile(commentP); // comment
matcher = otherPattern.matcher(str);
matcher.find();
tmpStr += matcher.group();
System.out.println("@[email protected]"+matcher.group()+"@");
//--------------------------------------------------
resultTemp.add(tmpStr);
} else {
// NOK
listIsCorrectlyFormatted = false;
tmpStr = "ERROR at line: # " + counter;
resultTemp.add(tmpStr);
System.out.println("#"+counter+" :: NOT OK ``"+str+"``");
}
counter++;
}
List<String> result = new ArrayList<String>();
result.add(Boolean.toString(listIsCorrectlyFormatted));
result.addAll(resultTemp);
return (ArrayList<String>) result;
}
堆棧跟蹤:
Thread [main] (Suspended (exception IllegalStateException))
Matcher.group(int) line: not available
Matcher.group() line: not available [local variables unavailable]
DataProcess.validateList(List<String>) line: 111
DataProcess.main(String[]) line: 15
SOLUTION:
matcher.reset();
otherPattern = Pattern.compile(plussP); // plus
matcher = otherPattern.matcher(str);
matcher.find();
try {
if (matcher.groupCount() > 0) {
tmpMatcherGroup = matcher.group();
}
} catch (IllegalStateException e) {
System.out.println(e);
}
tmpStr += tmpMatcherGroup;
System.out.println("@[email protected]" + tmpMatcherGroup + "@");
什麼局部變量? – Ankur
「tmpMatcherGroup」爲空,因爲matcher.group()不返回(發生異常)。 –
簡稱:JDK類不會與調試信息一起編譯,因此在調試過程中無法看到局部變量。 [描述](http://stackoverflow.com/questions/10266560/debugging-not-able-to-inspect-the-variables),[溶液](http://stackoverflow.com/questions/271521/locally-declared -variables-can-be-inspected) – CAMOBAP