buf.append(ch); continue; } int amph = str.indexOf('&', i + 1); if( amph != -1 && amph < semi ) {
    public String unescape(String str) {        StringBuffer buf = new StringBuffer(str.length());        int i;        for (i = 0; i < str.length(); ++i) {            char ch = str.charAt(i);            if (ch == '&') {                int semi = str.indexOf(';', i + 1);                if (semi == -1) {                    buf.append(ch);                    continue;                }                String entityName = str.substring(i + 1, semi);                int entityValue;                if (entityName.length() == 0) {                    entityValue = -1;                } else if (entityName.charAt(0) == '#') {                    if (entityName.length() == 1) {                        entityValue = -1;                    } else {                        char charAt1 = entityName.charAt(1);                        try {                            if (charAt1 == 'x' || charAt1=='X') {                                entityValue = Integer.valueOf(entityName.substring(2), 16).intValue();                            } else {                                entityValue = Integer.parseInt(entityName.substring(1));                            }                        } catch (NumberFormatException ex) {                            entityValue = -1;                        }                    }                } else {                    entityValue = this.entityValue(entityName);                }                if (entityValue == -1) {                    buf.append('&');                    buf.append(entityName);                    buf.append(';');                } else {                    buf.append((char) (entityValue));                }                i = semi;            } else {                buf.append(ch);            }        }        return buf.toString();    }