res.append(HTMLsrc.substring(0, i)).append("&"); HTMLsrc = HTMLsrc.substring(i + 1);
if (entity.startsWith("#")) { res.append(HTMLsrc.substring(0, i)); char c = (char) Integer.parseInt(entity.substring(1));  res.append(c); HTMLsrc = HTMLsrc.substring(j + 1); } else { res.append(HTMLsrc.substring(0, i)).append("&"); HTMLsrc = HTMLsrc.substring(i + 1); }
	public static final String unescape(String HTMLsrc) {		if (HTMLsrc == null) {			return null;		}		StringBuffer res = new StringBuffer();		while (HTMLsrc.length() > 0) {			int i = HTMLsrc.indexOf('&');			if (i == -1) {				res.append(HTMLsrc);				break;			}			int j = HTMLsrc.indexOf(';', i);			if (j == -1) {				// this should never happen, but it does...				res.append(HTMLsrc.substring(0, i)).append("&");				HTMLsrc = HTMLsrc.substring(i + 1);				continue;			}			String entity = HTMLsrc.substring(i + 1, j);			String decodedEntity = (String) quickRevEntities.get(entity);			if (decodedEntity == null) {				res.append(HTMLsrc.substring(0, i)).append("&");				HTMLsrc = HTMLsrc.substring(i + 1);				continue;			}			res.append(HTMLsrc.substring(0, i)).append(decodedEntity);			HTMLsrc = HTMLsrc.substring(j + 1);		}		return res.toString();	}