private void findPatterns() {
    	if (this.currentPredictions.isEmpty() || anyPredictionMet() || allPredictionsFailed()) {
    		//not monitoring any predictions, need to look for new patterns
			String s;
		    for (int i = 2; i < this.data.length()/2; i+=1){
			   /*
			   String regex = "((\\d+\\s){"+i+"}).*\\1";
		       Pattern p = Pattern.compile(regex);
		       Matcher matcher = p.matcher(this.data);
		       */
		       Matcher matcher = PatternSearchRegexCache.getInstance().getRegex(i).matcher(this.data);
		       int j = 0;
		       while (matcher.find(j)) {
		    	   if (!this.patterns.contains(s = matcher.group(1).trim())) {
		    		   this.patterns.add(s);
		    	   }
		    	   j = matcher.start()+1; //j one character past pattern
		    	   j = this.data.indexOf(' ',j); //j is moved to the following space, where the next pattern element is
		       }
		   }
		   //we're done, print all the patterns we found
		   int index = 0;
		   for(String pattern : this.patterns){
			   System.out.println("Pattern "+(index++)+": "+pattern);
		   }
    	}
	}