docs: public String soundex(String s)
      {
          String sound = "01230120022455012623010202";
          // Letters' categories
          // ABCDEFGHIJKLMNOPQRSTUVWXYZ
          char code[] = {'0', '0', '0', '0'};
          if ((s == null) || (s.length() == 0))
              return null;
          code[0] = Character.toUpperCase(s.charAt(0));
          if (!Character.isLetter(code[0]))
              return null;    // Must start with a letter
          int iSrc = 0;   // Start at second char
          int iDest = 1;
          char ch;
          while (iSrc < s.length())
          {
              if (iDest >= 4)
                  break;
              iSrc++;
              if (!Character.isLetter(s.charAt(iSrc)))
                  continue; // skip all nonalphabetics
              ch = sound.charAt(Character.toUpperCase(s.charAt(iSrc))-'A'); // Determine the category
              if ((ch == '0') || (ch == code[iDest - 1]) )
                  continue;
              code[iDest++] = ch;
          }
          return new String(code);
      }