Matcher.group() states the local variable is unavailable
<p>While trying to get matcher.group() as string it tells that it's unavailable. Why?</p>

<p><img src="http://i.stack.imgur.com/yHtmN.jpg" alt="enter image description here"></p>

<p>CODE:</p>

<pre><code>private static ArrayList&lt;String&gt; validateList(List&lt;String&gt; listToProcess) {

        List&lt;String&gt; resultTemp = new ArrayList&lt;String&gt;();
        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("@NAME@"+matcher.group()+"@");
                // -----------------------------------------------------
                matcher.reset();
                otherPattern = Pattern.compile(plussP); // plus
                matcher = otherPattern.matcher(str);
                matcher.find();

                 tmpMatcherGroup = matcher.group();
                tmpStr += tmpMatcherGroup;
                System.out.println("@PLUS@"+tmpMatcherGroup+"@");
                //--------------------------------------------------
                matcher.reset();
                otherPattern = Pattern.compile(commentP); // comment
                matcher = otherPattern.matcher(str);
                matcher.find();
                tmpStr +=  matcher.group();
                System.out.println("@COMMENT@"+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&lt;String&gt; result = new ArrayList&lt;String&gt;();
        result.add(Boolean.toString(listIsCorrectlyFormatted));
        result.addAll(resultTemp);

        return (ArrayList&lt;String&gt;) result;

    }
</code></pre>

<p>STACK TRACE:</p>

<pre><code>Thread [main] (Suspended (exception IllegalStateException)) 
    Matcher.group(int) line: not available  
    Matcher.group() line: not available [local variables unavailable]   
    DataProcess.validateList(List&lt;String&gt;) line: 111    
    DataProcess.main(String[]) line: 15 
</code></pre>

<p>SOLUTION:</p>

<pre><code>matcher.reset();
                otherPattern = Pattern.compile(plussP); // plus
                matcher = otherPattern.matcher(str);
                matcher.find();
                try {
                    if (matcher.groupCount() &gt; 0) {
                        tmpMatcherGroup = matcher.group();
                    }
                } catch (IllegalStateException e) {
                    System.out.println(e);
                }
                tmpStr += tmpMatcherGroup;
                System.out.println("@PLUS@" + tmpMatcherGroup + "@");
</code></pre>
