docs: public int count(final String word) {
          if (word == null) {
              throw new NullPointerException("the word parameter was null.");
          } else if (word.length() == 0) {
              return 0;
          } else if (word.length() == 1) {
              return 1;
          }
  
          final String lowerCase = word.toLowerCase(Locale.ENGLISH);
  
          if (exceptions.containsKey(lowerCase)) {
              return exceptions.get(lowerCase);
          }
  
          final String prunned;
          if (lowerCase.charAt(lowerCase.length() - 1) == 'e') {
              prunned = lowerCase.substring(0, lowerCase.length() - 1);
          } else {
              prunned = lowerCase;
          }
  
          int count = 0;
          boolean prevIsVowel = false;
          for (char c : prunned.toCharArray()) {
              final boolean isVowel = vowels.contains(c);
              if (isVowel && !prevIsVowel) {
                  ++count;
              }
              prevIsVowel = isVowel;
          }
          count += addSyls.stream()
                  .filter(pattern -> pattern.matcher(prunned).find())
                  .count();
          count -= subSyls.stream()
                  .filter(pattern -> pattern.matcher(prunned).find())
                  .count();
  
          return count > 0 ? count : 1;
      }