docs: public List<String> matchAll(String text, int limit, boolean isDensityMatch, boolean isGreedMatch) {
  		if(null == text){
  			return null;
  		}
  		
  		List<String> findedWords = new ArrayList<String>();
  		WordTree current = this;
  		int length = text.length();
  		StringBuilder wordBuffer;//存放查找到的字符缓存。完整出现一个词时加到findedWords中，否则清空
  		char currentChar;
  		for (int i = 0; i < length; i++) {
  			wordBuffer = StrUtil.builder();
  			for (int j = i; j < length; j++) {
  				currentChar = text.charAt(j);
  //				Console.log("i: {}, j: {}, currentChar: {}", i, j, currentChar);
  				if(StopChar.isStopChar(currentChar)){
  					if(wordBuffer.length() > 0){
  						//做为关键词中间的停顿词被当作关键词的一部分被返回
  						wordBuffer.append(currentChar);
  					}else{
  						//停顿词做为关键词的第一个字符时需要跳过
  						i++;
  					}
  					continue;
  				}else if(false == current.containsKey(currentChar)){
  					//非关键字符被整体略过，重新以下个字符开始检查
  					break;
  				}
  				wordBuffer.append(currentChar);
  				if(current.isEnd(currentChar)){
  					//到达单词末尾，关键词成立，从此词的下一个位置开始查找
  					findedWords.add(wordBuffer.toString());
  					if(limit > 0 && findedWords.size() >= limit){
  						//超过匹配限制个数，直接返回
  						return findedWords;
  					}
  					if(false == isDensityMatch){
  						//如果非密度匹配，跳过匹配到的词
  						i = j;
  					}
  					if(false == isGreedMatch){
  						//如果懒惰匹配（非贪婪匹配）。当遇到第一个结尾标记就结束本轮匹配
  						break;
  					}
  				}
  				current = current.get(currentChar);
  				if(null == current){
  					break;
  				}
  			}
  			current = this;
  		}
  		return findedWords;
  	}