public static String camelFromUnderscore(String str) {
        if (str == null || str.length() == 0) {
            return str;
        }
        char[] ar = str.toCharArray();
        int backref = 0;
        ar[0] = Character.toLowerCase(ar[0]);
        for (int i = 0; i < ar.length; i++) {
            if (ar[i] == '_') {
                if (ar[i + 1] >= '0' && ar[i + 1] <= '9') {
                    ar[i - backref] = ar[i];
                } else {
                    ar[i - backref++] = Character.toUpperCase(ar[i++ + 1]);
                }
            } else {
                ar[i - backref] = ar[i];
            }
        }
        return new String(ar).substring(0, ar.length - backref);
    }